chainer에서 Common Representation Learning을 시도해 보세요.

개요



KDD2016 workshop에 나오는 IBM Research, India의 사람의 「Joint multi-modal representations for e-commerce catalog search driven by visual attributes」을 chainer로 구현하려고 하는 것입니다.

논문 기법의 원논문은 여기입니다.
이 논문 이 구현은 Theano로 작성되었습니다.

논문의 내용은, 썰매 읽은 느낌, 텍스트와 이미지가 페어로 주어졌을 때, 그 공통 공간을 Neural Net를 사용해 구해 (기법명은 「Correlational Neural Net, 약어 CorrNet」) 검색 엔진에 도움 라고 하는 것이 되고 있습니다.

두 개의 다른 모달의 공통 공간을 찾는 경우, CCA를 사용하는 것이 일반적일까 생각합니다만, 실용상 scikit-learn의 CCA는 데이터 사이즈가 커지면(자) 훈련에 시간이 걸리는 &MemoryError로 사용물이 되지 않는 것도 그리고 이번에는 바삭 바삭한 chainer로 구현해 보았습니다.

python3에서 jupyter notebook에서 작성한 코드는 여기입니다.

상관 계수를 공통 공간에서 커지도록 학습시키는 것이 포인트 같다.

이미지 다이어그램


손실 함수는 두 모달이 주어지면 둘 다 복원 할 때의 손실, 한쪽 모달이 주어지면 둘 다 복원 할 때의 손실 및 숨겨진 레이어에서 상관 관계가 높아지는 손실로 구성됩니다. 합니다.


사용한 데이터



쉽게 시도하고 싶었기 때문에 MNIST를 사용하여 28x28 이미지와 one-hot-vector 형식으로 라벨 정보의 공통 공간을 찾았습니다.

앞으로 다른 데이터로도 시도 할 것입니다.

결과



원래 이미지





복원 후의 화상(「이미지」→「이미지」)





잘 복원 할 수있는 것 같습니다.

라벨을 사용한 복원 후 이미지 ( "라벨"→ "이미지")





라벨 정보를 조합하여 (0과 8)의 복원 후의 화상(「라벨」→→「이미지」)





0과 8의 중간과 같은 이미지가 제대로 생성되고 있습니다.

로스의 변화



Total





세부





제대로 숨겨진 층에서 상관이 높아지도록 학습이 진행되고 있습니다!

고찰



라벨 정보에서만 복원할 수 있는 것 같습니다!

어쨌든, chainer, 역시 Theano보다 상당히 간단하게 쓸 수 있어 로그도 출력할 수 있어 편리하네요^^

좋은 웹페이지 즐겨찾기