[비전공자를 위한 딥러닝] 2.6 신경망 (4) - 순전파로 예측하기

 

신경망의 전체적인 구조를 다시 살펴보자.



1. 왼쪽부터 살펴보면, 먼저 세 가지 특성값을 가진 데이터가 입력된다.


2. 데이터의 정보는 신경망의 첫번째 은닉층으로 전파(propagation)되는데, 첫번째 은닉층에는 다섯 개의 노드가 존재한다. 이는 세 가지 특성의 여러가지 조합들로부터 다섯 가지 새로운 특성을 추출하는 것을 의미한다.


3. 새롭게 추출된 특성 정보들은 다음층으로 이동하는데, 다음층의 노드 개수는 마찬가지로 다섯 개다. 새롭게 생성되는 특성의 개수가 이전 층보다 반드시 커야만 더 많은 정보가 추출되는 것은 아니며, 해당 층이 속한 구조의 목적에 따라 노드의 수가 점점 작아지게 구성할 수도 있다.* 우리가 살펴보고 있는 구조의 경우, 이전 층에서 추출된 더 세부적인 정보들을 다시 여러가지 조합을 통해 새로운 특성을 추출하기 때문에, 이전 층과 동일한 다섯 개의 노드로 구성되어 있더라도 새로운 정보를 더 추출할 수 있다.

* 연속된 은닉층의 노드 개수가 점점 많아지는 경우 업스케일링(up-scaling)이라고 하며, 적은 특성들로부터 많은 특성들을 추출해내는 구조라고 할 수 있다. 반대로 연속된 은닉층의 노드 개수가 점점 적어지는 경우 다운스케일링(down-scaling)이라고 하며, 많은 특성들로부터 적은 특성들을 생성하는 구조라고 할 수 있다.
다운스케일링과 업스케일링을 순서대로 연결한 오토인코더(auto encoder) 구조의 경우, 줄어든(요약된) 정보를 바탕으로 다시 많은 정보를 복원시키는 과정을 통해 데이터의 특성을 효율적으로 파악한다.


4. 마지막으로 다섯 개의 특성들을 바탕으로 하나의 값을 출력하는데, 이는 모델이 데이터를 통해 추출한 하나의 값인 "예측"이라고 보면 된다. 이 마지막 노드를 여러 개로 구성하면 여러 종류의 예측을 할 수 있으며, 이미지 데이터 중에서 개와 고양이를 구별하는 등의 분류(classification) 문제에 사용할 수 있다. 이에 대해서는 다음 챕터에서 더 자세히 살펴볼 것이다.



결과적으로 신경망 모델이 하는 일은 위와 같다. 데이터를 입력으로 받아서, 예측을 출력하는 것이다.
이 과정을 순전파(forward propagation)라고 한다.


그렇다면 이 예측 모델을 학습시키는 과정은 어떻게 진행될까?
우리가 지난 장에서 살펴본 것처럼, 모델이 출력한 예측과 실제 레이블(정답)이 얼마나 다른지를 측정한 뒤, 그에 대한 피드백을 모델에 전달하는 과정을 반복하면서 학습이 진행된다.





이 때 예측과 정답 사이의 거리를 계산하는데, 하나의 데이터가 들어온 경우 보통 오류(error)라고 표현하고, 전체 데이터가 들어와 그 오류들의 평균을 계산한 경우 비용(cost)이라고 표현한다. 이 비용을 구한 뒤에는 그 비용을 줄이는 방향으로 모델에게 피드백을 전달한다.


이 과정을 반복하는 것이 학습이며, 모델은 학습을 통해 더 예측을 잘하는 모델로 점차 변해간다.



학습 중에 모델의 구조는 그대로 유지되며, 모델 속의 "가중치" 부분이 계속 업데이트된다.
이 때 여러 층의 가중치를 순서대로 쉽게 업데이트하기 위해 역전파(backpropagation)라는 알고리즘이 사용된다. 역전파에 대해서는 다음 장에서 자세히 살펴보도록 하자.



학습을 통해 모델이 더 예측 잘하는 모델로 변해가는 과정은, 실제로는 다음과 같이 모델의 가중치가 더 예측을 잘하는 가중치로 변해가는 과정인 것이다.



학습이 끝난 후에, 우리는 학습된 모델을 가지게 된다. 물론 여기서 학습이란 모델의 가중치가 학습되었다는 것을 의미한다.



이 학습된 모델을 가지고 우리는 컴퓨터 소프트웨어, 웹 어플리케이션, 모바일 앱 등을 만들어 실제 문제를 해결하는 데 사용할 수 있다. 학습된 모델에 새로운 데이터를 입력해 예측을 얻어내는 과정 역시 순전파라고 할 수 있지만, 이 경우에는 특별히 추론(inference)이라는 용어를 사용한다.




이제 간단한 신경망 모델을 통해, 실제로 숫자들을 계산해보며 어떻게 순전파가 진행되는지 살펴보자.

위와 같은 신경망 모델을 생각해보자. 입력으로 두 개의 특성값이 주어지며, 노드가 각각 3개씩인 두 개의 은닉층을 가지고 있는 회귀 모델이다. 회귀 모델이란 마지막 출력 노드가 하나인, 분류 모델과는 달리 하나의 예측값을 출력하는 모델을 말한다.


입력이 [1.3, 0.8, 0.5]로 주어졌다고 가정해보자. 첫번째 값은 특성1을 나타내며, 두번째 값은 특성2, 마지막 값은 이 데이터의 레이블(정답)을 의미한다.

학습되지 않은 모델에서 순전파를 통해 예측한 값은 아마도 이 정답과 가까운 값이 아닐테지만, 학습을 진행하여 이 문제에 더 적합한 가중치를 얻게된 후에는 정답과 가까운 값을 예측할 것이다. 우선은 신경망 모델을 통과하는데 있어 당장 사용하지 않을 정답 값을 따로 떼어놓자.


모델을 처음 생성할 때 가중치 초기화(weight initialization)를 진행한다.

가중치를 반복해 업데이트시켜서 더 나은 예측을 하는 가중치를 만드는 것이 학습의 목표인데, 처음에 가중치를 어떤 값으로 정해줄 지 또한 신경써야할 문제다. 많이 사용되는 가중치 초기화 방법으로는 "He" 방식이나 "Xavier" 방식이 있는데, 둘 다 그 방식을 제안한 연구자의 이름을 따온 이름이다. 이 포스팅에서는 자세히 다루지는 않겠지만, 간단히만 말하자면 어떤 적당한 분포에서 임의의 수를 가져오는 방식들에 속한다고 볼 수 있다.

우리 예시의 경우에는 단순히 -0.3 ~ 0.3 사이의 수 중에서 임의의 수를 가져오기로 하자. 그림처럼 가중치 세 개가 각각 0.1, 0.2, 0.3의 값으로 초기화되었다고 하자. 이 경우 우리는 다음과 같이 가중치를 표기할 수 있다.



가중치를 표기하는 방법에 대해 간략히 설명하자면 다음과 같다.



주의할 점은, 책이나 논문에 따라 오른쪽 밑의 두 수의 순서가 거꾸로 표기될 수 있다는 것이다. 표기상의 차이일 뿐이지만 혹여나 헷갈릴 수 있기 때문에 언급하고 넘어간다.


동일한 방식으로 나머지 세 개의 가중치도 -0.1, 0.0, 0.1 이라는 임의의 수로 초기화한 후, 이를 표기하면 위와 같다. 이제 첫번째 은닉층의 첫번째 노드에 어떤 값이 계산되는지 살펴보자.




각각의 노드가 모델의 구조에서 의미하는 바는 "새로 생성되는 특성"에 해당하지만, 매번 학습될 때마다 계산되는 값이 바뀌게 되는데 그 값은 따로 엑티베이션(activation)이라고 부른다. 이 값은 이전 층의 특성들이 조합된 선형회귀를 통해 계산된다. (간략한 설명을 위해서 편향인 bias 항은 생략했다.)

엑티베이션의 표기하는 방법은 다음과 같다.




두번째 노드의 엑티베이션은 이전 층의 동일한 두 노드가 다른 두 개의 가중치와 조합되어 계산된다.


세번째 노드의 엑티베이션도 마찬가지로 계산된다.


다음층으로 넘어가기 전에, 엑티베이션 값들은 활성화 함수를 통해 비선형 변환을 해줘야한다.
비선형 변환 과정이 없다면 아무리 많은 층을 쌓아 깊은 신경망 구조를 만들더라도 단 한 층의 은닉층 모델로 대체될 수 있기 때문이다. (기억이 나지 않는다면 2.3 신경망 (1) - 비선형 변환이 필요한 이유 참조)

이번 예시에서는 간단하게 렐루(ReLU)를 사용하기로 하자.


다음 층을 계산하는 방법은 동일하므로 빠르게 넘어가겠다.
가중치들은 마찬가지로 각각 -0.3 ~ 0.3 사이의 랜덤 값으로 초기화해주었다.


두번째 은닉층의 활성화 함수의 결과값까지 계산했으니, 이제 최종적인 예측을 할 차례다.

세 값의 가중합을 계산해서 하나의 값을 구하면 되는데, 이 결과값은 예측 값을 의미한다. 모델의 구조 관점에서 살펴본다면 예측을 위해 사용되는 세 개의 노드는 최종적으로 추출된 특성들을 의미한다. 즉, 복잡한 신경망 모델을 통해 데이터의 다양한 특성들을 추출해낸 뒤, 마지막 은닉 층의 세 개의 특성들을 가지고 데이터의 정답을 예측하는 것이다. (간단한 예시를 보이기 위해 세 개의 노드만 설정했지만, 최종 예측에 직접적으로 활용되는 특성들인 만큼 많은 수의 노드를 마지막 은닉 층에 배치하는 것이 보통이다.)

물론 아직 학습이 진행되지 않았고 단순히 초기화된 가중치로 계산된 결과이기 때문에, 정답과 가까울 가능성은 매우 적다. 반복적으로 예측 후 피드백을 통해 이 예측 값과 정답 사이의 거리를 점차 줄여나가는 것이 학습이라고 생각하면 된다. 가중치는 마찬가지로 각각 -0.3 ~ 0.3 사이의 랜덤 값으로 초기화해주었다.




예측 값이 도출되었으니, 이제 이 예측 값이 정답과 얼마나 차이가 나는지 그 거리를 계산해보자.
이 경우 데이터가 단 한 개 통과되었기 때문에 비용이 아닌 오차라고 한다.




이렇게 우리는 간단한 신경망 모델을 만들고, 가중치 초기화를 한 뒤 하나의 데이터를 넣고 그 예측값과 오차를 계산해보았다. 생각보다 간단하지 않은가?

물론 우리는 아직 순전파까지만 살펴본 것이고, 다음 장에서는 모델이 학습하는 방법인 역전파에 대해서 살펴볼 예정이다. 이름에서 짐작할 수 있듯이, 역전파는 계산된 오차를 오른쪽에서부터 거꾸로 전파시켜가며 가중치를 업데이트해내가는 알고리즘이다.







---과제---




Q1~6. 위의 그림은 신경망 구조를 나타낸다. 각각에 해당하는 것을 그림에서
 찾아 번호를 적으시오.




댓글 쓰기

4 댓글

  1. 뭐에 홀린듯이 비전공자를 위한 딥러닝 카테고리 글들을 안쉬고 전부 다 읽게되었네요. 쉽게 설명해주셔서 감사합니다!!

    답글삭제
    답글
    1. 안녕하세요, 도움이 되었다니 기쁘고 뿌듯하네요. 감사합니다 :)

      삭제
  2. 대박 도움되었습니다.

    답글삭제
    답글
    1. 도움이 되었다니 기쁘네요!

      삭제