2016-12-10 11 views
1

하스켈에서 신경 네트워크를 구현하려고합니다. 이 네트워크는 일시적으로 인식되므로 타임 스텝은 기능의 중요한 부분입니다. 너무 많은 정보를 필요로하지 않고, 시간이 지남에 따라 네트워크를 실행의 내 일반적인 구현은 다음과 같습니다Haskell에서 시스템을 모델화하는 방법

foldM stepNetwork initialNetwork (zip images labels)

아이디어는 각 시간 단계가 하나 개 이상의 이미지/라벨 쌍을 배운 새로운 네트워크를 생성하는 것입니다. 그러나 이러한 접근 방식은 이전 네트워크의 정보를 기억하려고 시도하는 일부 중대한 데이터 구조로 이어집니다. 여기 내 숨겨진 층 구조입니다 :

data HiddenLayer = HiddenLayer { hResponse :: Response 
           , hOldResponse :: Response 
           , hNeurons  :: [YNeuron] 
           } deriving Show 

내 현재 stepNetwork 기능에 가깝다 :

stepNetwork (Network x y z) = Network newX newY newZ 
    where 
    newX = stepLayer x (hOldResponse y) 
    newZ = stepLayer z (hOldResponse y) 
    newY = stepLayer y (currentResponse newX) (currentReponse newZ) 

내가 네트워크에 따라 기존의 응답을 가지고 다닐 필요가 싶지 않아요. 다음은 네트워크의 레이어 사이의 관계입니다. 여기에서 X, Y 및 Z는 세 개의 레이어입니다. 이 시간에 민감하므로

enter image description here

는,이 관계를 모델링 할 수있는 좋은 방법이 될 것 FRP 것 같아,하지만 난 그냥 FRP 패러다임이 모델링하는 방법을 모르겠어요. 어떤 충고? 그것은 몇 가지 부작용이 또는 출력 당신이 그것을 모델링 할 수있는 경우

+0

왜 newY = stepLayer y (currentResponse newX) (currentReponse newZ)'라고 쓰지만 다이어그램에'newY = stepLayer y (hOldResponse x) (hOldResponse z)'가 쓰여 있는지 이해할 수 없습니까? – freestyle

답변

2

입력 벡터 x을 관찰하고 상태를 가지는 재발 성 신경 네트워크 f의 아키텍처 h,

f :: h -> x -> h 

이미 관찰 한 그대로 로

그리고 foldM f으로 실행하십시오. 수행하는 또 다른 전형적인 것은 ho에서 출력을 생성하는 출력 층 f :: x -> State h o 하나에 해당하는 별도의 네트워크 또는 g :: h -> o

f :: h -> x -> (h, o) 

를 양성이고; 부작용이 있다면 f :: x -> StateT m h o입니다.

교육 네트워크는 f 함수를 학습하고 어떤 경우에는 h 유형을 학습합니다. 반복 네트워크는 모든 시간 단계에서 동일한 기능 f을 사용합니다. 에 대한 교육의 일은을 학습하고 과거의 기능은 h으로 기억해야합니다. "이전 네트워크의 것을 기억하려고 시도하는 일부 중대한 데이터 구조"가 필요하지 않은 경우 네트워크는 h을 사용하여 이전 시간 단계의 관련 사항을 기억합니다.

f을 구현하고 학습하는 데 네트워크 또는 감독 된 교육 메커니즘을 사용할 수 있습니다.

반복적 인 신경망 대신 회선을 사용하는 경우 회선이 작동하는 시간대를 기억해야합니다. 이를 수행하는 쉬운 방법은 전체 창을 입력 벡터 x'으로 제시하는 것입니다. 두 경우 모두 네트워크 구현시 히스토리를 명시 적으로 저장하지 마십시오. f. 컨벌루션 된 네트워크는 반드시 초기 시간 단계에서 이월 된 상태를 반드시 볼 필요는 없으며, f :: x' -> o 일 수 있습니다.


나는 당신이 이미지 (나는지도 학습에 대한 예입니다 가정) 라벨을 모두 제시하고 있기 때문에, 더 깊게하려는 생각합니다. 알려진 예제 세트에서 f을 훈련 시키려면의 일련의 학습을 통해 을 모델링 할 필요가 없습니다.

당신이 기계 훈련 f의 상태 t있을 것이다 일련의 경험에서 학습 을 모델링하려면

및 기능 t -> typeOf(f). 기계 교육 f의 유형은 기계가 실제 세계에 연결되는 방법에 따라 다릅니다. 실제 세계에서 경험을 확실하게 되풀이하지 않으면 기기가 이전 경험 (특히 f의 성능이 저조한 경우)을 기억하여 추가 학습을 위해 해당 경험을 f에게 보여줄 수 있습니다. 기계는 학습의 주위에 감싸는 f는 악몽을 줄 것이다 f. f이 기존 성능을 잃지 않는지 확인하려면 몇 가지 경험을 기억해야합니다.이 경우 f은 즐거운 꿈을 꾸게됩니다.

이전 경험을 기억하는 것은 어쨌든 f 님의 직업입니다.


더 자세히 가고 싶습니까? 훈련 기계가 f과 같은 것들을 훈련하는 방법을 배울 필요가 있다면, f과 같은 문제의 가족에 대해 훈련을받을 것입니다. 훈련 기계의 매개 변수는 문제 사이에서 공유 될 것이고, 기계는 기억해야 할 것을 학습 할 것이다. 어떤 수준에서는 기계가 스스로를 감독 할 것이고, 열악한 매개 변수를 배우고 붙어있는 이러한 종류의 기계는 무능한 기계를 파괴하는 더 큰 선택 시스템에 의해 제거 될 것입니다.