[비전공자를 위한 딥러닝] 2.3 신경망 (1) - 비선형 변환이 필요한 이유

목차 보기


신경망에서 '층을 쌓는다'는 것의 의미가 무엇일까?
이전 장에서 살펴본 선형회귀 과정을 통해, '이전 층의 특성들의 가중합으로 새로운 특성들을 만들어내는 것'이 층을 쌓는 이유이자 의미라고 할 수 있다. 이 과정을 반복해 여러 층을 쌓고 반복적으로 학습을 진행하면, 처음 입력으로 주어진 특성들의 조합으로부터 생성된 수많은 특징들이 추출(extract)되어 모델이 훨씬 더 상세한 정보를 학습할 수 있게 된다.


신경망에서 입력과 출력을 제외한 층들을 은닉층(hidden layer)이라고 한다.
이 은닉층들을 여러 층으로 깊게(deep) 쌓을 때 주의할 점이 있다. 새로 만들어지는 특징들, 즉 노드(node)들이 각각 비선형(non-linear) 변환을 거치지 않는다면 아무리 깊게 층을 쌓더라도 단 하나의 은닉층보다 나은 효과를 내지 못하기 때문이다.

그 이유를 알아보기 위해 먼저 두 선형함수를 살펴보자.




이 두 함수는 x라는 입력이 들어왔을 때 각각 선형변환*된 출력을 반환하기 때문에 선형함수라고 할 수 있다.


* 선형변환의 엄밀한 개념은 임의의 벡터 u, v와 임의의 스칼라 a에 대해 다음 두 조건이 성립하는 변환을 의미한다.
1) T(u + v) = T(u) + T(v)
2) T(av) = aT(v)

간단하게 직관적으로 설명하자면,
1) 직선 위에 있는 어떠한 두 벡터를 더해도 결국 직선 위를 벗어날 수 없고,
2) 직선 위에 있는 어떠한 한 벡터를 늘리거나 줄이거나 방향을 바꿔도 (즉, 상수배로 곱해도) 직선 위를 벗어날 수 없다.

더 자세한 내용은 선형대수학 기초를 참고하길 바란다.


두 함수가 하는 역할을 좀 더 쉽게 표현하면 다음과 같다.


자, 이제 10이라는 입력값을 두 함수에 차례로 통과시켜보자.





10은 f 함수에 의해 21으로 변환되고, 그 21은 g 함수에 의해 -11로 변환되는 것을 볼 수 있다.
하지만 이 두 함수를 꼭 순차적으로 실행해야 결과를 볼 수 있을까?




식을 자세히 살펴보면, 이 두 함수를 통과하는 변환은 단지 f와 g의 합성함수 하나로 표현할 수 있다.




g(x)의 x에 f(x)의 출력에 해당하는 2x + 1을 넣어서 -(2x + 1) + 10을 계산하면 식을 도출할 수 있다.



방금 무슨 일이 일어났는지 살펴보자.
우리는 f와 g라는 두 함수를 h라는 하나의 함수로 표현할 수 있었고, 굳이 f와 g 함수에 값을 순차적으로 통과시키지 않더라도 h 함수를 통해 한 번에 동일한 결과값을 얻을 수 있게 되었다.


마찬가지로, 은닉층을 2층으로 쌓더라도 그 변환이 단지 선형변환이라면 우리는 하나의 층으로 그 변환을 표현할 수 있다. 3층, 4층 나아가 수십 층을 쌓더라도 결국 하나의 층으로 표현할 수 있다. 이렇게 된다면, 은닉층을 깊게 쌓아 모델이 심층적인 학습을 할 수 있게 하려는 목적은 달성되지 못하게 된다.


그렇다면 어떻게 해야 하나의 변환으로 대체될 수 없는 깊은 은닉층을 만들 수 있을까?
바로 이전 층의 선형결합을 통해 새로운 특성이 만들어질 때마다, 그 값을 다음 층으로 전달하기 전에 비선형 변환을 시켜주면 된다.




1. 선형결합을 통해 새로운 특성노드에 값이 정해진다.




2. 그 값에 비선형 변환을 적용한다.




비선형 변환을 시켜주는 대표적인 비선형 함수로 시그모이드(sigmoid)가 있다.


그래프를 살펴보면, 시그모이드 함수는 x축에 해당하는 입력에 대해서 0~1 사이의 값을 반환한다.




잘 와닿지 않을 수 있어서 임의의 숫자들을 시그모이드 함수에 입력해보았다.
시그모이드는 값이 큰 음수가 들어올 때 0에 매우 가까운 수를 반환하고,
0에 가까운 수가 들어올 때 0과 1의 중간인 0.5에 가까운 수를 반환하고,
값이 큰 양수가 들어올 때 1에 매우 가까운 수를 반환하는 것을 볼 수 있다.


한마디로 시그모이드는 모든 실수를 입력 범위로 가지며, 0에서 1사이의 값을 반환하는데 이는 일종의 스위치 같은 역할을 한다.
신경망 모델의 모티브가 된 실제 인간의 신경망에서는, 이전 층의 뉴런들의 신호들이 조합되어 일정 임계값(threshold)을 넘을 경우에만 다음 층으로 신호가 전달되는 시스템이 존재한다. 이와 마찬가지로, 인공신경망에서도 이전 층의 특성들이 선형결합을 통해 새로운 특성을 생성하는데, 이 값이 임계값을 넘는지 안 넘는지에 따라 0과 1 둘 중 하나에 가까운 값으로 변환하는 시그모이드를 적용하는 것이다.




이러한 스위치 역할을 하는 비선형 함수들을 활성화함수(activation function)라고 한다. 시그모이드 외에 렐루(ReLU) 등 다양한 함수들이 활성화함수로 사용되고 있다.


시그모이드보다 렐루가 더 널리 쓰이는 이유로 기울기 소실(gradient vanishing) 등이 존재한다.


이제 f, g 두 함수 사이에 비선형 변환인 시그모이드를 추가해보자. 


f 함수의 출력인 21, -19라는 값이 시그모이드를 통과하면서 각각 0.99, 0.01이라는 값으로 변환되었다. 이 값들이 g 함수에 들어가 최종적으로 9.01, 9.99라는 값이 출력되며, 이 전체 과정은 하나의 선형함수로 대체할 수 없다.

 
선형변환을 좌표 축의 변환으로도 해석할 수 있다.
(변환 후에도 두 점 사이 거리의 비율이 유지됨)



비선형변환을 이런 느낌으로 이해하는 것이 도움이 될 수 있다.
(변환 후에 비율이 유지되지 않음)




다음 장에서는 파이썬으로 활성화함수 시그모이드와 렐루를 구현해볼 것이다. 프로그래밍이 처음인 분들도 어렵지 않게 준비할 것이니 걱정할 필요는 없다.


댓글 쓰기

0 댓글