본문 바로가기
AI_basic/Deeplearning

[Deeplearning Part.3] 신경망 학습

by hits_gold 2022. 1. 6.
반응형

신경망 학습이란

 신경망 학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것을 뜻합니다. 한 조합의 가중치 매개변수는 특정한 예측값들을 만들고, 그 예측값과 실제값의 차이를 이용해 손실함수를 결과값을 만들 수 있습니다. 이제 이 손실함수의 결과값을 가급적 작게 만드는 방향으로 가중치 매개변수를 조절하여 신경망의 학습이 이루어집니다.

 

학습의 전환

 세 번째 학습이 다른 두 학습과 다른 점은 신경망이 데이터의 "있는 그대로"를 학습한다는 것입니다. 두 번째 접근방식은 특징을 사람이 설계했지만, 신경망은 이미지에 포함된 특징까지도 기계가 스스로 학습합니다.

 


 

1. 손실함수

 1) 평균 제곱 오차 MSE

   

평균 제곱 오차식

y는 신경망의 출력, t는 정답 레이블, k는 데이터의 차원 수를 나타냅니다.

  • y-t에 제곱을 해주는 이유는 y-t의 결과값이 음수가 되는 것을 방지하기 위해서입니다.
  • 1/2을 곱해주는 것은 y-t의 최대 결과값이 2이기 때문에 1로 정규화하기 위함입니다.

 

  2) 교차 엔트로피 오차 CEE

교차 엔트로피 오차 CEE

 정답 레이블(t)가 원핫인코딩 되어있어 정답이 아닌 레이블은 모두 0이됩니다. 따라서 위 식을 사용할 경우 정답 레이블이 1인 경우, 즉 정답일 때의 출력이 전체 값을 정하게 됩니다. 따라서 똑같이 정답으로 분류해냈다 하더라도 정답 레이블에 대한 출력이 더 높다면  교차 엔트로피 오차가 더 낮습니다.

 교차 엔트로피 오차를 구현할 경우, y에 아주 작은 수(1e-7)을 더해주어 -inf가 출력되는 일을 방지합니다.

 

  3) 미니배치 학습을 통한 손실 함수

 

   MNIST 데이터셋의 경우 훈련데이터가 60000개나 됩니다. 더 나아가 빅데이터 수준이 되면 모든 데이터의 손실 함수의 합을 구하려면 시간이 걸립니다. 이런 경우 데이터 일부를 추려 전체의 "근사치"로 이용할 수 있습니다. 신경망 학습에서도 훈련 데이터로부터 일부만 골라 학습을 수행하고, 이 일부를 미니배치mini-batch라고 부릅니다.

 

  4) 정확도가 아닌 손실함수를 매개변수 조절의 지표로 삼는 이유

     

    100장의 훈련 데이터 중 60장을 올바로 인식할 때 정확도는 60%일 것입니다. 가중치 매개변수를 아주 조금 조절해도, 60장을 올바르게 인식한다는 정확도는 쉽게 개선되지 않고 일정하게 유지됩니다. 또한 정확도가 개선되어도 불연속적인 값으로 바뀝니다. 이는 계단함수를 신경망의 활성화 함수로 사용하지 않는 이유와도 같습니다.

 

     하지만 손실함수를 지표로 삼는다면 매개변수의 조그만 변화에도 손실 함수의 값이 연속적으로 반응합니다. 따라서 가중치 매개변수의 변화에 따른 손실함수의 미분값을 통해 가중치를 조절해야 할 방향을 결정할 수 있습니다.

 


 

2. 손실함수의 수치미분으로 가중치의 방향 정하기(경사법)

손실함수 그래프

  위 그림과 같은 손실함수가 있습니다. 손실함수 그래프 상에서 최저점이 보이는데 그냥 저 값의 가중치값을 가져다 쓰면 되는 것 아닐까요? 아닙니다.

  신경망 모델에서는 가중치를 대입해 손실함수값을 계산하고, 이에 따라 가중치를 업데이트합니다. 위 그래프는 모든 가중치를 대입해봐야 나올 수 있는 그래프입니다. 한 가중치 조합을 대입했을 때 우리는 위 그래프의 한 점을 알 수 있는 것이고, 그 점의 미분값을 통해 경사를 따라 내려가 최저점으로 가는 방향으로 가중치를 업데이트하는 것입니다. 이 때 경사를 따라 내려가 손실함수 최저점을 찾는 법을 경사 하강법이라고 합니다.

   

  1) 수치미분

  위에서 본 그래프 전체를 알 수 없다는 사실은 우리가 손실함수를 미분할 때 해석적 미분이 아니라 수치 미분을 사용하는 이유입니다. 해석적 미분은 수식을 전개하는데 비해 수치 미분은 가중치의 아주 작은 변화에 따른 손실함수의 변화를 계산합니다.

   

수치 미분

 

  

 수치 미분은 h 즉 x값의 작은 변화량에 따른 y값의 변화를 계산해냅니다. 위 식을 코드로 구현할 때, 두 가지 주의할 것이 있습니다.

  •  반올림 오차

          -> h에 너무 작은 값을 대입하면 작은 값이 생략되어 최종 계산 결과에 오차가 생깁니다. 

          -> 보통 1e-4정도의 값을 사용하면 좋은 결과를 얻는다고 알려져 있습니다.

 

  • 전방 차분의 오차

           -> 위 수식은 x의 값을 아주 조금 키워 미분한 전방 차분이라고 합니다. 하지만 h의 값을 무한히 0으로 좁히는 것이 불가능해 오차가 포함되고, 이 오차를 줄이기 위해 중앙 차분을 사용합니다.

중앙 차분 h -> 0

 

   2) 편미분

       편미분이란 변수가 2개 이상인 식에서 특정 변수에 대한 미분을 의미합니다. 편미분은 그 특정 변수를 제외한 변수들은 상수 취급을 하고 미분을 해줍니다.

 

    3) 기울기

 

   위와 같이 변수가 두개인 식에 대해 각각의 변수로 편미분을 해주면, 다음과 같이 표현할 수 있습니다.

이처럼 함수에 대해 모든 변수의 편미분을 벡터로 정리한 것을 기울기gradient라고 합니다. 위 그래프의 특정 값들에 대해 기울기를 구해 마이너스를 붙인 뒤, 그 벡터들을 2차원상에서 표현하면 다음과 같습니다.

기울기 벡터의 표시

 마치 기울기들이 함수의 가장 낮은 장소(최소값)을 가리키는 것 같지만, 실제는 반드시 그렇다고 할 수 없습니다. 각 기울기들은 각자의 장소에서 함수의 출력 값을 가장 크게 줄이는 방향입니다. 따라서 각 지점에서 기울기가 가리키는 방향에 함수의 최솟값이 있는지 보장할 수 없습니다. 실제로 복잡한 함수에서는 기울기가 가리키는 방향에 최솟값이 없는 경우가 대부분입니다.

 

   4) 경사하강법

       

    

 위 수식은 경사하강법을 수식으로 나타낸 것입니다. 여기서 η는 갱신하는 양 즉 학습률(learning rate)라고 합니다. 학습률이 너무 크면 최저점을 지나칠 수 있고, 너무 작으면 가중치가 제대로 갱신되지 않은 책 끝날 수 있습니다. 따라서 학습률을 적절히 설정하는 것이 중요합니다.

 

반응형