ㅁ sing layer perceptron
o Threshold : 어떤 값이 활성화 되기 위한 최소값
o Weight : 선형분류모델의 기울기
o Bias : 선형분류를 위한 직선의 절편
o Neuron : 인공신경망의 가장 작은 요소
o Epoch : 전체 데이터를 한번 학습했을때 1 Epoch
o 아래의 그림 그대로 신경망과 딥러닝에도 설명이 들어간다.
- $$ F(x) = W_0X_0 + W_1X_1 + W_2X_2 + W_3X_3 .... $$
- 위의 식은 범위가 무한대 인데 어떻게 퍼셉트론은 이진분류가 나올 수 있는 것인가?
- Activation Function = f 인 활성함수를 써서 이진분류로 나온다.
- 여기서 쓰는 활성함수는 Step function을 쓴다.
- 무한대가 나오는 아이들을 퍼셉트론의 결과는 대부분 0과 1로 나온다.
- 무한대가 나오는 애들을 어떻게 0과 1로 나오는게 하는 것인가?
- THreshold 값보다 f(x)값이 크거나 같으면 1이라고 출력하고 F(x)가 Threshold값보다 작으면 0이라고다.
- 결과값이 0보다 작으면 다 0이고 0보다 크면 다 1이라고 한다 = 계단함수
- 여기서 내가 하는 값은 x밖에 없다. 나머지는 다 모르는데, 모르면 임의의값을 넣는 것이다.
- 근데 신경망에서는 모른다고 임의의 값을 마음대로 넣을 수가 없다.
ㅁ Algorithm
o 구조는 입력층과 출력 층의 곱과 합으로 구성 되어있다.
o 항상 결과는 이진 분류만 가능하다.
o 이것도 슈퍼바이저 러닝이라 타겟벨류(Taget Value)가 있어야한다.
- W0도 가중치인데, W0도 데이터를 모른다. 하지만W에서는 범위가 -.05 ~ 0.5의 임의의 값을 넣는다.
- 바이어 입력(절편값)은 -1 또는 1로 초기화
- 하나의 학습 백터에 대한 출력층 뉴런의 net 값 계산
- 활성함수를 통해 계산된 net 값으로부터 뉴런의 실제 출력값 계산
- 목표 값과 출력값이 일치하지 않으면 가중치 조정
- 모든 출력값이 목표값과 일치할때까지 위를 반복
o 뉴런의 net 값 계산
- Xi와 Wi의 시그마를 하면 곱의 합이고 이게 net 값이다.
o 활성함수
- net 값이 Threshold 값보다 크거나 같으면 1이고, 아니면 0 이다.
- 근데 아까전에 가중치를 조절한다는데 어떻게 조절을 할 것인가?
- 선형분류모델에서 가중치 업데이트를 어떻게 했나??? -> 델타 a를 구했다.
- 선형분류모델에서는 델타 a값을 구했다. 퍼셉트론에서도 델타a를 구할 수 있고, 그러면 가중치를 업데이트할 수 있다.
- 퍼셉트론에서는 델타w라고 하고, 문제는 델타 a즉, 델타 w를 찾는 알고리즘을 어떻게 찾을 것인가?
o 학습연산
- 아래의 식이 그 공식이고, 학습연산이라고 한다. 자세히 보면 선형 분류모델과 같다.
- 선형분류모델은 델타 a를 입력값 x를 오차로 나누었다면 퍼셉트론에서는 곱하라는 이야기이다.
- 수식은 조금만 다를뿐 개념은 비슷하다.
$$ W_i = W_i + nX_i (T - f(net)) $$ $$ n = Learning Rate $$ $$ T = Target Value $$
ㅁ AND 연산으로 예제를 한번 풀어보자
o 학습률(Learning Rate)는 0.05로 설정하고 다음 데이터로 계산을 해보자.
X1 | X2 | T |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
가중치와 바이어스를 -0.5 ~ 0.5 사이의 임의의 값으로 설정한다.
$$ W_0 = 0.3 , W_1 = 0.4 , W_2 = 0.1 $$
바이어스 입력값은 -1로 초기화
$$ X_0 = -1 $$
1st Epoch (트레이닝 데이터 1줄)
(0,0,0)에 대한 출력계산
$$ W_0 = 0.3 , W_1 = 0.4 , W_2 = 0.1 $$ $$ X_0 = -1 , X_1 = 0, X_2 = 0 $$ $$ net = W_1X_1 + W_2X_2 + W_0X_0 = -0.3 $$
-0.3은 0보다 작기때문에 0으로 출력 된다.
$$ f(net) = 0 $$
그러면 출력값이 목표 값(T)와 일치하므로 가중치(Weight)를 수정하지 않는다.
(0,1,0)에 대한 출력계산
$$ W_0 = 0.3 , W_1 = 0.4 , W_2 = 0.1 $$ $$ X_0 = -1 , X_1 = 0, X_2 = 1 $$ $$ net = W_1X_1 + W_2X_2 + W_0X_0 = -0.2 $$
-0.2는 0보다 작기때문에 0으로 출력한다.
$$ f(net) = 0 $$
그러면 출력 값이 목표 값(T)과 일치하므로 가중치(W)를 수정하지 않는다.
(1,0,0)에 대한 출력 계산
$$ W_0 = 0.3 , W_1 = 0.4 , W_2 = 0.1 $$ $$ X_0 = -1 , X_1 = 1, X_2 = 0 $$ $$ net = W_1X_1 + W_2X_2 + W_0X_0 = 0.1 $$
0.1은 0보다 크기떄문에 1로 출력한다.
$$ f(net) = 1 $$
그러면 출력 값이 목표 값(T)와 일치하지 않기 때문에 가중치(W)를 수정해야 한다.
$$W_0 = W_0 + nX_0(T-f(net)) = 0.3 + 0.05 * (-1) * ( 0 - 1 ) = 0.35 $$ $$ W_1 = W_1 + nX_1(T - f(net)) = 0.4 + 0.05 * 1 * (0 - 1 ) = 0. 35 $$ $$ W_2 = W_2 + nX_2(T-f(net)) = 0.1 +0.05 * 0 * ( 0 - 1 ) = 0.1 $$
위와 같이 가중치를 수정한다 그리고 다음 순서를 진행한다.
(1,1,1)에 대한 출력 계산
$$ W_0 = 0.3 , W_1 = 0.4 , W_2 = 0.1 $$ $$ X_0 = -1 , X_1 = 1, X_2 = 1 $$ $$ net = W_1X_1 + W_2X_2 + W_0X_0 = 0.1 $$
net값이 0.1이니까 1로 출력한다.
$$ f(net) = 1 $$
그러면 출력 값이 목표값과 일치하기때문에 가중치를 수정한다.
이로써 1주기(1Epoch)가 끝났다.
이와방식으로 2Epoch와 3Epoch를 진행하면된다.
2Epoch
(0,0,0)과 (0,1,0)의 출력은 목표값과 같음
고로 가중치의 변화는 없다.
(1,0,0)은 출력값이 1이 나오기때문에 목표 값과 다름
고로 가중치의 변화가 필요하다.
(1,1,1)은 출력값과 목표 값이 같음
고로 가중치의 변화가 없다.
정리하면 다음과 같다.
$$ W_0 = 0.35 + 0.05 * (-1) * ( 0 - 1 ) = 0.4 $$ $$ W_1 = 0.35 + 0.05 * 1 * ( 0 - 1 ) = 0.3 $$ $$ W_2 = 0.1 + 0.05 * 0 * ( 0 - 1) = 0.1 $$
3Epoch
이전 단계에서 수정된 가중치로 학습 데이터를 입력
모든 출력 값과 목표 값이 일치하므로 알고리즘 종료
최종 가중치
$$ W_0 = 0.4 , W_1 = 0.3 , W_2 = 0.1 $$
위가 학습된 데이터가 된다.
'Develop > AI' 카테고리의 다른 글
인공지능(신경망, 딥러닝) 교육 정리 (Backpropagation) (0) | 2023.01.08 |
---|---|
인공지능(신경망, 딥러닝) 교육 정리(Artificial Neural Network 1) (0) | 2023.01.08 |
인공지능(신경망, 딥러닝) 교육 정리(Differential, 미분) (0) | 2023.01.01 |
인공지능(신경망, 딥러닝) 교육 정리(Python, 객체지향(with.Java)) (0) | 2023.01.01 |
인공지능(신경망, 딥러닝) 교육 정리(Logistic Regression) (0) | 2023.01.01 |
최근댓글