일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬 동시성
- Play2
- hyperledger fabric
- 하이브리드앱
- 파이썬 머신러닝
- CORDA
- 스칼라
- 블록체인
- Akka
- 파이썬 강좌
- play 강좌
- Play2 로 웹 개발
- 안드로이드 웹뷰
- Adapter 패턴
- 플레이프레임워크
- Hyperledger fabric gossip protocol
- 스위프트
- 스칼라 동시성
- 스칼라 강좌
- 하이퍼레저 패브릭
- Actor
- play2 강좌
- 그라파나
- 엔터프라이즈 블록체인
- 파이썬 데이터분석
- akka 강좌
- 이더리움
- 파이썬
- Golang
- 주키퍼
- Today
- Total
HAMA 블로그
인공신경망 - (퍼셉트론) 본문
* 퍼셉트론
- 계단 함수 또는 부호함수를 사용하여 만들어진 단순한 뉴런
- 퍼셉트론에서는 초평면과 선형분리 개념이 적용된다.
> 초평면 : N차원 공간을 두개의 영역으로 나누는 평면
> 선형분리 : 값의 분포를 2개로 나눠지는 평면이 존재하면, 선형분리가 가능하다라고 한다.
- 선형분리가 가능해야지 퍼셉트론으로 표현이 가능하다.
ex1) AND
> 녹색선과 빨간색선은 모두 2차원 공간을 2개로 나누는 초평면이다.
> 녹색선으로 만들어진 함수는 AND를 나타내기 위해 부적합하다.
> 붉은선으로 만들어진 함수는 AND를 나타내기에 적합하다. 또한 붉은선에 의해서 상태가 나눠지므로,
선형분리가 가능하다.
> 이는 퍼셉트론으로 계산이 가능하다.
ex2) XOR
> 어떠한 초평면으로도 XOR을 만족시키는 것이 없다.
> 이는 선형분리가 불가능하며, 퍼셉트론으로 계산이 불가능하다.
* 퍼셉트론의 학습규칙
- 퍼셉트론의 학습은 오차율을 계산해내어, 입력값의 비율 만큼 가중치 값을 조종한다.
- 다음과 같은 AND연산을 위한 퍼셉트론에서 (x1, x2)가 (1, 1)이 들어 왔을 때,
가중치 값을 변경해 나가는 것을 보며 학습규칙을 설명하겠다.
1) 현재 들어 온 값과 Step함수를 이용해 Y값을 구한다.
f(X1*W1 + X2+W2 - θ ) = f(1*0.2 + 1*(-0.1) - 0.2 ) = f( - 0.1) = 0 (Step 함수는 0보다 클 경우 1을 작을경우 -1을 출력)
2) (1, 1)이 들어 왔을 때에 기대 값은 1이므로, 오차 "1"이 발생한다.
> e = Yd - Y ( Yd : 목표치 / Y : 현재치 )
3) 오차가 발생했기 때문에 보정을 해준다. 이 보정은 다음의 식을 따른다.
> Wi(next) = Wi(current) + a * Xi * e // 다음 가중치 = 현재 가중치 + 보정치 * 입력값 * 오차 // a = 0.1
( a는 0과 1사이의 값으로 학습률을 나타낸다. 이 값은 Wi값이 적정치로 가는데 값의 변화의 폭을 줄이기 위해서 필요하다. )
> 위 식에 따라 W1(next) = 0.2 + 0.1 * 1 * 1 = 0.3, W2(next) = -0.1 + 0.1 * 1 * 1 = 0.0으로 계산된다.
- 위와 같은 형식으로 가중치 값을 학습해나간다. 이는 오차를 누가 더 많이 발생했느냐에 따라서 가중치 값의 변화도 변한다.
- 위 과정은 가능한 모든 입력치에 대해서 모두 실행했을때 모두 오차가 나지 않을 때 까지 반복한다.
> 하나의 입력치 뭉치를 에폭이라고 하며, 가중치 값을 한번 변화하는 과정을 P값을 이용해 나타낸다.
- 위에서 알아본 퍼셉트론의 학습규칙을 일반화하면 다음과 같다.
ⓐ Step 1 : 초기 가중치 값 및 임계값(θ)를 임의의 값으로 부여한다. 여기서 θ와 W값은 -0.5~0.5 사이를 만족시키도록 한다.
또한 P값을 1로 Setting한다. 또한, 정한 학습률을 저장시킨다.(슈도코드에선 0.1로 선택)
>> Pseudo Code
theta = Random[-0.5,0.5]; // Set the theta value( threshold )
for ( i = 0 ; i < n ; i++ ) W[i] = Random[-0.5,0.5]; // Set the W[i] value( weight )
p = 1; // Set the P value ( Proceed number )
assistant = 0.1; // Set the a value
ⓑ Step 2 : 활성화 함수와 theta값을 이용하여 Y(p)값을 산출해난다.
>> Pseudo Code
sum = 0; // sum value of Xi * Wi
result; // Value of Y(i)
// Calculate Step Function
for ( i = 0 ; i < n ; i++ ) sum += x[i]*w[i]; // sum of Xi * Wi
sum -= theta; // Minus threshold value
if ( sum > 0 ) result = 1;
else result = 0;
ⓒ Step 3 : 다음 식을 이용하여 가중치 보정을 실시한다. 에러가 발생하지 않았다면 Step 4로 간다.
>> Pseudo Code
error = expectation[p] - result;
if ( error != 0 ){
for ( i = 0 ; i < n ; i++ ) w[i] += assistant * x[i] * e;
}
ⓓ Step 4 : 한 에폭을 실시하는 동안 에러가 나지 않는 다면 종료, 하나라도 에러가 났다면 Step 2로 돌아간다.
* 퍼셉트론의 한계
- 선형분리가 불가능한 문제에 대해서 해결 할 수 없었다.(XOR)
- 이러한 문제를 풀기 위해서 나온 것이 다층 피드 포워드 신경망이다.
'통계 & 머신러닝 & 딥러닝 ' 카테고리의 다른 글
제프리 힌톤은 그냥 더 좋은 사다리를 만들었을뿐.. (0) | 2015.12.26 |
---|---|
인공신경망 - (다층 피드 포워드 신경망) (0) | 2015.10.04 |
인공신경망 - (소개) (0) | 2015.10.04 |
ICA (Independent Components Analysis) 란? (0) | 2015.10.04 |
집단지성프로그래밍 (2) (0) | 2015.05.27 |