Deep learning/이론(hands on machine learning)

2. 다층 퍼셉트론과 역전파

jwjwvison 2021. 5. 30. 19:13

 다층 퍼셉트론은 입력층(input layer) 하나와 은닉층(hidden layer) 이라 불리는 하나 이상의 TLU층과 마지막 출력층(output layer)로 구성된다. 입력층과 가까운 층을 보통 하위 층이라 부르고 출력에 가까운 층을 상위 층(upper layer)라고 부른다. 출력층을 제외하고 모든 층은 편향 뉴런을 포함하며 다음 층과 완전히 연결되어 있다.

 

 은닉층을 여러 개 쌓아 올린 인공 신경망을 심층 신경망(deep neural network(DNN)) 이라고 한다. 딥러닝은 심층 신경망을 연구하는 분야이며 조금 더 일반적으로는 연산이 연속하게 길게 연결된 모델을 연구한다.

 

 역전파 알고리즘은 효율적인 기법으로 그레이디언트를 자동으로 계산하는 경사 하강법이다. 네트워크를 두 번 통과하는 것만으로 이 역전파 알고리즘은 모든 모델 파라미터에 대한 네트워크 오차의 그레이디언트를 계산할 수 있다. 다른 말로 하면 오차를 감소시키기 위해 각 연결 가중치와 편향값이 어떻게 바뀌어야 할지 알 수 있다. 그레이디언트를 구하고 나면 평범한 경사 하강법을 수행한다. 전체 과정은 네트워크가 어떤 해결책으로 수렴될때까지 반복된다.

  역전파 알고리즘을 조금 더 자세히 살펴보자.

 

 한번에 하나의 미니배치씩 진행하여 전체 훈련 세트를 처리한다. 이 과정을 여러 번 반복한다. 각 반복을 에포크(epoch)라고 부른다.

 

 각 미니배치는 네트워크의 입력층으로 전달되어 첫 번째 은닉층으로 보내진다. 그다음 (미니배치에 있는 모든 샘플에 대해) 해당 층에 있는 모든 뉴런의 출력을 계산한다. 이 결과는 다음 층으로 전달된다. 다시 이 층의 출력을 계산하고 결과는 다음 층으로 전달된다. 이런 식으로 마지막 층인 출력층의 출력을 계산할 때까지 계속된다. 이것이 정방향 계산(forward pass)이다. 역방향 계산을 위해 중간 계산값을 모두 저장하는 것 외에는 예측을 만드는 것과 정확히 같다.

 

 그다음 알고리즘이 네트워크의 출력 오차를 측정한다(즉, 손실 함수를 사용하여 기대하는 출력과 네트워크의 실제 출력을 비교하고 오차 측정 값을 반환한다).

 

 이제 각 출력 연결이 이 오차에 기여하는 정도를 계산한다.

 

 이 알고리즘은 또 다시 연쇄 법칙을 사용하여 이전 층의 연결 가중치가 이 오차의 기여 정도에 얼마나 기여했는지 측정한다. 이렇게 입력층에 도달할 때까지 역방향으로 계속된다. 앞서 설명한 것처럼 이런 역방향 단계는 오차 그레이디언트를 거꾸로 전파함으로써 효율적으로 네트워크에 있는 모든 연결 가중치에 대한 오차 그레이디언트를 측정한다(여기서 역전파라는 알고리즘의 이름이 유래했다).

 

 마지막으로 알고리즘은 경사 하강법을 수행하여 방금 계산한 오차 그레이디언트를 사용해 네트워크에 있는 모든 연결 가중치를 수정한다.

 

 이 알고리즘을 요약하면 각 훈련 샘플에 대해 역전파 알고리즘이 먼저 예측을 만들고(정방향 계산) 오차를 측정한다. 그런 다음 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도를 측정한다(역방향 계산). 마지막으로 이 오차가 감소하도록 가중치를 조정한다(경사 하강법 단계).

 

 이 알고리즘을 잘 작동하고자 논문 저자들은 다층 퍼셉트론 구조에 중요한 변화를 주었다. 계단 함수를 로지스틱(시그모이드) 함수로 바꾼 것이다.

널리 쓰이는 다른 두 개의 활성화 함수

 

 활성화 함수가 왜 필요할까? 선형 변환을 여러개 연결해도 얻을 수 있는 것은 선형 변환뿐이다. 예를 들어 f(x)=2x+3 과 g(x)=5x-1을 연결하면 또 다른 선형함수 f(g(x))=2(5x-1)+3=10x+1이 된다. 따라서 층 사이에 비선형을 추가하지 않으면 아무리 층을 많이 쌓아도 하나의 층과 동일해진다. 이런 층으로는 복잡한 문제를 풀 수 없다. 반대로 비선형 활성화 함수가 있는 충분히 큰 심층 신경망은 이론적으로 어떤 연속 함수도 근사할 수 있다.