소개
1 단계
나는 표준 역 전파 신경망을 작성하고 테스트하기 위해 XOR을 매핑하기로 결정했습니다.
2-2-1 네트워크입니다 (tanh 활성화 기능 포함).
X1 M1
O1
X2 M2
B1 B2
테스트 목적으로, 상단 중간 뉴런 (M1)을 AND 게이트로 설정하고 하단 뉴런 (M2)을 OR 게이트로 설정했습니다 (참이면 출력 1, 거짓이면 -1).
이제 연결 M1-O1을 -.5로, M2-O1을 1로, B2를 -.75로 수동 설정했습니다.
따라서 M1 = 1이고 M2 = 1이면 합은 (-0.5 +1 -0.75 = -.25) tanh (0.25) = -0.24
M1 = -1이고 M2 = 1 인 경우 합은 ((-0.5) * (-1) +1 -0.75 = .75) tanh (0.75) = 0.63
M1 = -1이고 M2 = -1이면 합은 ((-0.5) * (-1) -1 -0.75 = -1.25) tanh (1.25) = -0.8
이것은 "첫 번째 반복"에 대해 비교적 좋은 결과입니다.
2 단계
그런 다음이 가중치를 약간 수정 한 다음 오류 전파 알고리즘 (그라디언트 디센트를 기반으로)을 사용하여 학습합니다. 이 단계에서는 입력과 중간 뉴런 사이의 가중치를 그대로두고 중간 (및 바이어스)과 출력 사이의 가중치를 수정합니다.
테스트를 위해 가중치를 .5 .4 .3 (각각 M1, M2 및 바이어스에 대해)으로 설정했습니다.
그러나 여기서는 문제가 발생하기 시작합니다.
내 질문
학습 속도를 0.2로 설정하고 프로그램이 10000 회 이상의 반복 학습 데이터 (ABA ^ B)를 반복하도록했습니다.
대부분 의 경우 가중치는 좋은 결과로 수렴됩니다. 그러나 때때로이 가중치는 1.5, 5.7 및 .9로 수렴되어 {1, 1}의 입력에 +1 출력이 발생합니다 (결과는 -1이어야 함).
전혀 수렴하지 않는 솔루션이 있거나 구현에 버그가있는 비교적 간단한 ANN이 가능합니까?