곤충의 폭과 길이로 애벌레와 무당벌레를 구분한다고 해보겠습니다
길이가 길고 폭이 좁으면 애벌레이고 길이가 짧고 폭이 넓으면 무당벌레일 것입니다
이 둘 사이를 분할선으로 분류할 때 너무 급하거나 너무 완만하지 않고 적절한 기울기의 분할선일 때 분류가 가능합니다
즉 분류의 학습은 분할선의 기울기를 변화시키는 것입니다.
기존의 데이터를 잘 분류하도록 학습이 되었다면 임의의 데이터를 넣어서 분류합니다.
미지의 곤충을 분류할 때 학습된 분류기를 통해 미지의 곤충은 애벌레라고 판단할 수 있습니다.
곤충 분류를 위한 학습 데이터를 주겠습니다
예제 | 폭 | 길이 | 곤충 |
1 | 3.0 | 1.0 | 무당벌래 |
2 | 1.0 | 3.0 | 애벌레 |
가설
y = Ax
처음에 기울기 A의 값은 임의의 데이터 0.25로 하겠습니다
학습과정을 통해 A값은 개선되고 정답을 찾아가므로 관계가 없습니다
기울기 A = 0.25
무당벌레 X = 3.0
무당벌레 기대값 Y = 1.1 (무당벌레가 1이므로 조금더 크게 줘야 분휴가 되므로)
무당벌레 결과값 Y = 0.75
y = 0.25 x 3.0 = 0.75
오차 = 목표값 - 실제 출력 값
E = 1.1 - 0.75 = 0.35
기대값과 결과값은 0.35정도 차이가 납니다
현제 기울기 A에서 얼마만큼 변화값(델타A)을 줘야 기대값과 일치할까요?
t = (A + △A)x
t : 기대값(정답)
y : 현제 기울기에 x를 입력했을 때 결과값
E = t-y
= (A + △A)x - Ax
= Ax + △Ax -Ax
= △Ax
분류의 학습은 A값에 계속 델타A를 더하면서 E값을 줄여나가도록 하는것입니다
델타A는 현재 기울기에 더해 져야 할 기울기 변화값 에러/입력x를 계산하면 얻을 수 있습니다
△A = E / x
△A = E / x = 0.35 / 3.0 = 0.1167
현제 기울기 = 0.25
변화값 = 0.1167
개선된 기울기 = 0.25 + 0.1167 = 0.3667
우리는 무당벌레 데이터를 통해 무당벌레 분류기를 만들었습니다.
이번에는 현재 분류기에 애벌레 데이터를 입력해보겠습니다
애벌레 기대값 Y = 2.9
애벌레 의 결과값Y = 0.3667 * 1.0 = 0.3667
E = 2.9 - 0.3667 = 2.5333
△A = 2.5333/1.0 = 2.5333
애벌레 학습은 y = (0.3667 + 2.5333)x = 2.9x
이렇게 애벌레 학습도 끝났습니다
그런데 각각의 무당벌레와 애벌레를 학습랬더니 학습할 때 마다 해당 데이터에 치우쳐진 결과가 나타났습니다.
이러한 학습 방식은 특정 데이터에만 맞춰지는 과적합을 가져오게 되고 지나치게 분류기가 치우쳐져 있으므로 실제 사용할 때에는 잘못된 분류 결과를 가져오게 됩니다
그래서 모든 데이터의 학습을 고려한 학습방법를 사용해야 합니다
L(Learning Rate) : 학습률
모든 데이터를 고려해서 학습해야 하므로 학습률이라는 개념을 도입하겠습니다.
학습률은 해당 데이터로 학습을 해서 기울기를 수정할 때 지나치게 과적합되지 않도록 변화값을 줄여주는 역할을 합니다
△A = L(E / x)
L = 0.5라고 주겠습니다
<무당벌레 학습>
현제 기울기 = 0.25
변화값 = 0.1167
개선된 기울기 = 0.25 + 0.5*0.1167 = 0.3083
1차 업데이트 직선
첫번째 학습으로는 무당벌레를 잘 분류하기 어렵지만 어쨌든 무당벌레를 좀 더 분류하는 방향으로 기울기가 변화한 것은 사실입니다
<애벌레 학습>
애벌레 기대값 2.9
애벌레 결과값 0.3083 = 0.3083*1.0
E = 2.9 - 0.3083 = 2.5917
델타A = 2.5917/1.0 = 2.5917
애벌레 학습 y = (0.3083 + 0.5*2.5917)x = 1.6042x
무당벌레와 애벌레의 데이터를 모두 고려해서 한쪽 데이터에 지나치게 맞춰지는 것을 방지하기 위해서 점진성을 도입하려고 L = 0.5값을 변화값에 곱해주었습니다
그랬더니 2번의 학습결과 적절한 분류기가 만들어졌습니다
조정(moderate) 과정의 문제점은 이전 학습 데이터는 무시하고 최종 학습데이터에만 맞춰서 업데이트가 된다는 점입니다
이를 해결하기 위해 학습률을 도입해서 업데이터의 정도를 조정해줍니다
이를 통해 단일 학습데이터가 학습에 지배적인 영향을 주는 것을 방지할 수 있습니다
그래서 더 많은 데이터가 필요하고 반복적인 학습을 통해서 적절한 기울기를 찾을 수 있었습니다
현실에서 학습 데이터는 잡음이 섞여있거나 오차를 가집니다
학습률을 이용한 업데이트는 이러한 데이터 오류의 영향을 제한하는 효과도 있습니다
'NN' 카테고리의 다른 글
순전파 (Forward Propagation) (0) | 2023.02.06 |
---|---|
뉴런과 인공지능 (0) | 2023.02.02 |
분류자의 여러 개 필요성(XOR 문제) (0) | 2023.01.27 |
예측(Regression) (0) | 2023.01.16 |
머신러닝과 딥러닝 (0) | 2023.01.11 |