안녕하세요
단층 퍼셉트론의 XOR 문제를 해결하기위해
다층 퍼셉트론이 제시되었습니다. 다층 퍼셉트론은 은닉층을 추가하여 단층 퍼셉트론의 XOR문제를 해결하였는데요
https://ruminz.tistory.com/280
다층 퍼셉트론의 한계
하지만 다층 퍼셉트론은 하나의 문제가 있습니다. 바로 은닉층에 포함된 가중치를 업데이트할 방법이 없었던 것입니다.
왜냐면 은닉층에 있는 값들을 파악할수가 없기 때문이죠 수백~수천만개의 파라미터가 있는데 이걸 일일히 한번할때마다 파악하기가 굉장히 어려운 것입니다. 이를 해결하기 위해 오차 역전파가 나왔습니다.
오차역전파
경사하강법은 임의의 가중치를 설정하고 결괏값을 이용해 오차를 구한 후 이 오차가 최소인 지점으로 계속해서 조금씩 이동시키는것입니다. 좀더 자세한 내용은 해당 포스팅을 참고해주세요
https://ruminz.tistory.com/275 (경사하강법이란 무엇인가)
다층퍼셉트론은 은닉층이 생겼으므로 두번의 경사하강법을 실행하게 됩니다. 가중치를 두번 업데이트 해야됩니다.
문제는 은닉층의 가중치를 업데이트할때 은닉층에 값이 겉으로 들어나지 않아 어떻게 업데이트를 해야될지 모릅니다. 이를 해결하기 위해 츨력층을 오차를 이용해야됩니다. 이를 좀더 자세하게 나타내면 다음과 같습니다.
먼저 순전파가 한번 발생합니다. 이를 통해 가중치의 초기값이 정해집니다. 이 초기 가중치로 만들어진 값과 실제 값을 비교해 오차를 줄입니다. 역전파 2번이 발생하는걸 알수있는데 이를 통해 가중치를 수정해 갑니다.
첫번째 가중치 수정을 통해 w31을 수정합니다. 경사 하강법을 통해 구하면 w31을 업데이트 하기 위해 오차 공식을 구하고 w31에 대해 편미분 합니다. 그리고 두번째 역시 w11을 구하기 위해서는 오차 공식을 구하고 편미분을 해야됩니다. 여기서 문제가 생기는데 은닉층은 겉으로 드러나지 않으므로 값을 구할수가 없습니다. 즉 오차를 구할수 없다는거죠
이를 해결하기 위해 다시 츨력층의 오차를 이용합니다. w31의 경우 Yo1의 오차만 필요합니다. 하지만 w11의 경우 Yo1과 Yo2 모두 관여 되어있습니다. 따라서 오차 두개를 모두 계산에 편미분 하게 됩니다. 식은 다음과 같습니다.
$$ 첫 번째 가중치 업데이트 공식 = (Yo1 - Y오차값) * Yo1(1-Yo1) * Yh1 $$
$$ 두 번째 가중치 업데이트 공식 = (\Delta * Yo1 * w31 + \Delta * Yo2 * w41)Yh1(1-Yh1)*x $$
이를 이용해 은닉층의 숫자가 늘어나도 이러한 형태가 계속되어 깊은 층을 계산할수있습니다.
시그모이드 함수 한계 렐루(ReLU)함수 탄생
기존 시그모이드 함수를 써서 딥러닝을 구현하게 되면 출력층에서 입력층으로 가는 가중치가 소실되게 됩니다. 왜냐면 시그모이드 함수를 미분하게 되면 최대치는 0.25입니다. 따라서 계속 곱하다 보면 0에 가까워 지면서 소실되게 됩니다. 이를 해결하기 위해 렐루 함수가 나오게 됩니다.
렐루 함수는 x 가 0보다 같거나 작을때 y값 0을 가지고 x가 0보다 클때는 x값을 가집니다.
x를 미분하면 1이 되죠 즉 렐루 함수는 여러반 오차 역전파가 진행되어도 맨 처음 층까지 남아 있게 됩니다.
이를 사용함으로써 더욱 깊은층까지 쌓아 올릴수 있게 되었습니다.
경사하강법의 진화 아담(adam)
기존의 경사하강법은 한번 업데이트 할때마다 전체 데이터를 미분함으로 속도가 느리고 최적화 과정에서 멈출수 있습니다.
https://ruminz.tistory.com/275 (경사하강법이란 무엇인가)
이러한 점을 보완한 adam이 나오면서 더욱더 빠르고 정확하게 되었습니다.
아담(Adam)은 딥러닝에서 사용되는 최적화 알고리즘 중 하나로, 그라디언트 디센트(Gradient Descent) 기반의 가중치 업데이트 방법 중 하나입니다. 아담은 'Adaptive Moment Estimation'의 약자로, 그라디언트 디센트의 변형 중 하나로 매우 효율적으로 학습을 진행할 수 있도록 설계되었습니다.
아담은 모멘텀(Momentum)과 RMSprop(평균 제곱 그라디언트)의 아이디어를 결합한 알고리즘입니다. 이를 통해 빠른 수렴과 안정적인 학습이 가능합니다. 각 파라미터에 대해 개별적인 학습률(learning rate)을 동적으로 조정합니다. 이를 통해 학습률을 설정하는 어려움을 줄이고, 다양한 파라미터에 대한 효율적인 업데이트를 가능하게 합니다.
그라디언트 및 그라디언트 제곱값에 대한 지수 이동 평균을 유지합니다. 이전 그라디언트 정보를 활용하여 현재 업데이트에 영향을 주며, 이를 통해 안정적인 학습을 도모합니다.
아담은 편향 보정(bias correction)을 통해 초기 학습 단계에서 그라디언트 추정치의 편향을 줄입니다.
또한 많은 하이퍼파라미터 튜닝을 요구하지 않아도 학습이 잘 수행되는 경향이 있습니다. 그러나 특정 문제나 데이터셋에 따라 다른 최적화 알고리즘과 비교하여 성능을 확인하는 것이 중요할 수 있습니다.
'Coding > AI' 카테고리의 다른 글
mnist로 이미지 학습하고 인식하기 (0) | 2023.10.19 |
---|---|
이미지 딥러닝 기초 mnist 써보기 (0) | 2023.10.15 |
다층퍼셉트론이란 무엇인가 (0) | 2023.10.11 |
인공지능의 시작 퍼셉트론 아달리안 (0) | 2023.10.10 |
로지스틱 회귀란 무엇인가 (0) | 2023.10.10 |