이해하며 개인 노션에 작성한 글인데, 경어체를 쓸 겨를이 없군요!
추후 수정하도록 하겠습니다.
우선, s값을 계산해보자.
- 입력값 Xi * Wi(가중치)(i는 1부터 끝까지) + 1 * W0(bias) = s
- 구한 값을 f(), 즉 전달 함수(=활성화 함수)에 집어 넣는다.
- 여기서는, s가 특정값 이상이면 1이고, 아니면 0이다.
생물에서, 역치를 넘으면 반응하는 것 과 비슷하다.
그럼, OR 연산을 하는 퍼셉트론을 구해보자.
s는 어떻게 계산될까?
x1 + x2 + (-0.5) = s 일 것이고,
그럼 만약 x1 = 1, x2 = 0 이면? 0.5가 나오고, 0을 넘으니 f(s) = 1 일 것이다.
그럼 만약 x1 = 0, x2 = 1 이면? 마찬가지로 0.5가 나오고, 0을 넘으니 f(s) = 1 일 것이다.
(0,0) 이면, 결과가 -0.5 니 f(s)는 0일 것이고,
(1,1) 이면, 결과가 1.5이니 f(s)는 1일 것이다.
여기서 응용하면, bias를 -1.5로 바꿔주면(정확히는 -1 미만인 값?)
이산적으로는 AND 연산을 수행하는 퍼셉트론이 될 것이다.
퍼셉트론 문제
- 선형 분리가능 문제: 퍼셉트론 하나로 분리 가능, 직선 하나로 분리 가능
- 선형 분리불가 문제: 퍼셉트론 하나로 분리 안됨, 다층 퍼셉트론 써야함.
4.9.2 다층 퍼셉트론
XOR을 분류해내는 퍼셉트론을 만든다고 해보자.
XOR은, 두개가 달라야 1을 반환한다.
즉, (0,1)이나, (1,0) 일 때 1을 반환한다고 할 수 있겠다.
저 저 요상한 함수?를 보자.
1층에, f1(x)는 사실은 자세히 보면 bias가 -0.5로, OR을 구하는 하나의 퍼셉트론이다.
그리고 f2(x)는 조금 특이하긴 한데, 아까 AND에, x값에 붙여주는 가중치가 -1로 변했고, Bias가 1.5로 양수로 바뀐,
즉 AND 퍼셉트론에서 모든 가중치가 부호가 바뀐 퍼셉트론이다.
그리고 2층의 f3(x)는, 1층에서 나온 값을 모두 더하고, -1.5를 bias로 주는 퍼셉트론이다.
만약 입력값이 1,1 이라 치자.
f1(x) 에서는 그 결과값으로, 1.5를 내놓을 것이고
f2(x) 에서는 그 결과값으로, -0.5를 내놓을 것이며,
두 결과를 바탕으로, f3(x)에서는 1 - 1.5, 즉 0을 출력할 것이다.
어쨌든 이산적으로는 이렇다고 이해하고 넘어가보자. 쫄지말자.
어쨌든, 다층 퍼셉트론을 사용하면 XOR을 해결할 수 있지만,
가중치를 결정하는 학습 방법을 찾지 못했다.
그 이유는, 계단 함수는 미분이 불가능 했기 때문이다.
그래서 등장한, 계단함수를 대체할 녀석이
- 시그모이드
- 쌍곡 탄젠트
인 것이다.
계단함수와 비슷하지만, 미분할 수 있다.
시그모이드는, (0,1) 사이에서 출력값을 가지고
쌍곡 탄젠트는 (-1,1) 사이에서 출력값을 가진다.
다층 퍼셉트론은, 여러 층으로 구성되어 있는데,
크게는 입력층과 출력층이 있고, 그 사이에 은닉층이 있다.
가중치는, 인접한 층 사이에서만 연결선이 만들어진다.
즉, 입력층과 1층 사이에서만 연결, 1층과 2층 사이에서만 연결선이 있다.
다층 퍼셉트론은, → 방향으로 계산해 가면서 출력값을 만들어 낸다.
은닉층의 노드 j는, Z(j)를 출력해 낸다. (마치 퍼셉트론에서 f(s)를 출력한 것 처럼)
그것은, 마찬가지로
zsumj 는, 시그마(입력값 * 가중치 + bias) 이고, (쉽다. 단순히 다 곱하고 bias를 더한 것)
zj는, f(zsumj) 이다.
그리고 최종 출력층의 경우, 1층과 2층 사이에서의 연결선이 나타내는 가중치 vjk와,
입력층과 1층 사이에서 구한 zj를 곱해주고, 마지막에 bias를 더해주면 된다.
쫄 필요 없이, 간단하게 차근차근 생각하면 된다.
핵심 로직은,
sum j를 구하고, (모든 입력값 * 각자의 가중치 + bias)
이것을 f(Zsum j), 즉 Zj 라고 부른다.
그리고 다음 층도 약간 똑같이, 각 Zj * Vjk 하고 bias를 더해준 것을 sumK 라고 하고,
최종 함수인 O(sumK)를 구해준 뒤,
이를 f에 넣어 f(OsumK)를 구하면, 이걸 Ok 라고 할 수 있겠다.
여기서 f는, 아까 말한 -1~1 을 갖는 쌍곡 탄젠트 또는 0~1 사이 값을 가지게 하는 시그모이드가 되겠다.
다층 퍼셉트론의 학습은,
아무튼 원본 입력(x1, x2..)가 있고, 원본 출력(t1, t2…)가 있다면,
퍼셉트론이 입력을 넣으면 출력을 만들어 낼 수 있도록,
입력층과 은닉층 사이의 가중치 벡터 u
그리고 은닉층과 출력층 사이의 가중치 벡터 v를 결정하는 것이다.
여기서, o는 퍼셉트론이 뱉어낸 결과라고 하고, t는 원래 나와야 할 결과라 치자.
그럼 오차함수 E는, 오차를 나타내 주는 함수인데,
(퍼셉트론이 뱉어낸 값 - 나와야 할 값) 의 제곱 / 2 이다.
기억하자. 우리는 학습을 시키고 있다.
여기서 최대 경사법 또는 경사 하강법이란,
아무튼, 입력층과 은닉층 사이의 가중치 벡터인 u
그리고 은닉층과 출력층 사이의 가중치 벡터인 v
에, 각각 저런 그물망이 존재한다 치자. 그리고 우리는 저 그물망에서 조금씩 내려가서 저점을 찍어야 한다.
편미분을 해서, 그래디언트를 계산하는 식을 만들어 낸다.
그리고 학습을 할 때는, 입력 → 출력 방향과 반대방향인, 입력 ← 출력 방향으로
먼저 가중치 벡터 v를 수정하고, 그 다음 은닉과 입력층 사이의 가중치인 u를 수정한다.
이를 오차 역전파 알고리즘 이라고 한다.
이제 경사 하강법을 사용하는데, 가령 오차함수 (사실 그물망이 오차함수 였음) 에서 평평한 부분을 만나게 되면,
그래디언트가 영벡터(기울기가 없음)가 되어 학습이 되지 않는다.
그리고, 오류가 있는 학습 데이터를 만나도, 오차함수가 잘못 정의될 수 있다.
이러면 학습이 멈추니까, 가중치를 수정해 주는데,
수정해 주는 것은, 직전 시점의 그래디언트(평평한 부분을 만나기 직전의 그래디언트)를 어느정도 고려한다.
이걸 모멘텀 라고 하는데, 아무튼.
자, 그 다음 소프트맥스 층이란 것을 살펴보자.
아까 다층 퍼셉트론을 살펴보면, 최종 층이 여러개임을 알 수 있다.
보면 O1, Ok, Om 처럼, 여러 결과물이 나왔는데,
각각의 계산 결과는 0~1 사이 값이겠지만, 모든 출력의 합은 1이 아닐 것이다.
모든 출력의 합이 1이 되도록 정규화 할 수 있는데,
각각이 0~1 사이 값을 가지면서, 전체 합이 1이 되도록 하는 것이 Softmax 층이라고 할 수 있겠다.
부류 두 개를 나눴다. C1과 C2로.
퍼셉트론의 출력값 y(x,w)는, x를 입력 데이터를 넣고, w를 가중치, 그리고 y가 출력값인 것.
y는, 0~1 사이의 값이니, 조건부 확률 p(C1|x), 즉 C1 중 x일 확률, 이라고 할 수 있고,
1-y에 대해서는, p(C2|x)라고 간주한다.
이 경우, C1 일 때는 목표 출력 t값이 1, C2는 목표 출력 값이 0으로 하자. (분류 문제니 양쪽으로 찢기)
입력 x에 대한 목표 출력 t의 조건부 확률 p(t|x,w)를 다음과 같이 표현할 수 있다.
우측 상단의 t ik는 ,0 아니면 1이고, 1에서 K까지 중 단 하나의 tik만 1이다.
그러니까 그냥 어..
x, 즉 변수에 대해서, ti는 부류, C1이나 C2인데,
아무튼 저 파이시그마는 곱이니까, 뭐를 다 곱해도 최종적으로 한 값만 남는 것.
왜냐면 단 하나의 tik만 1이고,나머지는 0승 즉 1로 바뀌기 때문에
아무튼 그냥 식을 하나로 합친 것이다.
그리고 전체 데이터에 대해서는.. 저런 값을 가지는데,
아무튼 p(D;w)를 최대로 만들도록 하는 w가 가장 바람직한 파라미터이고,
최대로 하는 w를 추정하는 것을 최대 가능도 추정 이라고 한다.
최대 가능도 추정에는, 전체 학습 데이터에 대해서 정의하는 오차 함수를 정의하는데,
그 식은 위와 같다.
그러니까, 퍼셉트론의 출력값과 학습 데이터의 출력값에 대한 교차 엔트로피,
퍼셉트론 출력값의 분포와, 학습데이터 출력값의 분포가
정확히 일치할 때 교차 엔트로피는 0이 되고, 출력값의 분포가 다를수록 엔트로피가 커진다.
이 교차 엔트로피를 최소화 하는 가중치 w를 찾는 것이다.
로그를 사용하는 이유는, 출력값인 y 값중 0~1 사이 값이 너무 많아질 경우
모두 곱하면 0에 가까운, 0에 아주 가까운 값이 될 수 있기 때문에,
이를 방지하게 위해 log를 씌워 계산한다.
4.9.3 RBF망
RBF 망이라는게 있다. 이게 뭘까? 일단 일종의 신경망임.
중간층에서는 노드가 RBF 함수를 계산하고, 출력층에서는 노드가 중간층의 출력을 선형 결합한다.
RBF 함수의 결과값은 뭘 의미할까? 지금 벡터와 출력해야 할 벡터의 유사도를 측정해준다.
중간 층의 계산 결과가
이러한 분포를 띈다.
그리고 최종 함수인 fk(x)는, 이 RBF 함수 파이(x, 뮤) 에 가중치를 곱하고, bias를 더한 값.
중간에 저런 RBF 노드(저런 층)를 많이 사용하면 모델 성능이 향상되지만,
복잡도가 지나치게 커질 수 있기 때문에 노드 개수를 가능한 줄이자.
'CS > Artificial Intelligence' 카테고리의 다른 글
[AI] 군집화 알고리즘과 단순 베이즈 분류기 (1) | 2023.11.27 |
---|---|
[AI] Decision Tree, 엔트로피, 정보 이득, 정보이득비, 지니 지수 (1) | 2023.11.25 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!