딥모닝 2주차. PR12-007~011


  • PR12 동영상을 하루에 1개씩 보는 “딥모닝” 스터디에서 본 영상을 정리하는 글입니다
  • PR-007 : Deep Photo Style Transfer
  • PR-008 : Reverse Classification Accuracy(역분류 정확도)
  • PR-009 : Distilling the Knowledge in a Neural Network
  • PR-010 : Auto-Encoding Variational Bayes
  • PR-011 : Spatial Transformer Networks

PR-007 : Deep Photo Style Transfer

  • A Neural Algorithm for Artistic Style 논문을 먼저 살펴봄
  • 어떤 사진이라도 명화처럼 만들자!
    • 사진 : Content
    • 명화처럼 : Style
  • 이 논문 이전엔 feature를 뽑는데만 encoding만 관심 가짐
    • Understanding Deep Image Representations by Inverting Them
  • Preliminary 1
    • conv layer로 feature를 뽑음 ⇒ content generation
      • 레이어가 깊어질수록 왜곡이 존재, 정보를 많이 날림
    • Loss function
      • Image x를 iterative하게 만듬, weight 학습이 아님
      • 여기선 y와 w페어가 주어짐 ⇒ x 업데이트
  • Preliminary 2
    • Texture synthesis
    • 오리지날 텍스쳐를 가지는 것을 feature map으로 만들자 ⇒ style generation
    • texture와 periodicity가 유사하다고 봄, correlation에 texture(style) 정보가 숨어있다

Neural Algorithm of Artistic Style

  • Style generation from feature map
  • Content generation from feature map
  • 두 마리 토끼를 한번에!
  • content를 적당히 뭉개며 style을 적당히 가미
  • Loss는 2개를 더해줌

Deep Photo Style Transfer

  • Photorealism Regularization ⇒ 사진처럼 만들기
  • Augmented Style loss with semantic segmentation
  • Image Matting : foreground object를 뽑음, foreground object를 잘 뽑아내지 못하면 패널티
  • affine transform
  • Sky + building으로 구성된 이미지의 gram matrix를 생각해보자
    • sky^2+buidling^2+2*sky*building (cross term)
    • cross term을 없애버리기
    • feature map에 semantic segmentation mask를 통과시킴
      • sky, building에 대한 feature가 나옴
  • 람다가 커질수록 원래 하늘과 유사해짐

PR-008: Reverse Classification Accuracy(역분류 정확도)

  • 세분화의 성능을 테스트 데이터 라벨 없이 예측하는 방법
  • 문제 1 : 의료 이미지 세분화
  • 문제 2 : 데이터가 모자르다
  • Proposed method
    • 모든 데이터를 학습
  • Pseudo Ground truth : 가짜 정답
  • reverse classifier : 기존 모델과 비슷한 것을 학습
    • 테스트 데이터와 가짜 정답을 모델에 학습
  • 역분류 정확도
    • 학습용 데이터에 대한 역분류기의 성능을 다양한 척도로 확인
    • 논문은 RCA가 실제 classifier의 결과와 선형적 관계를 지닐 것이라고 추정
  • Calibration
    • Classifier와 Reverse classifier에 calibration
    • 정확도 보정
  • 실습

    old_data.shape -> (2500, 100) new_data.shape -> (2500, 100) Y.shape -> (100,)

    from sklearn.linear_models import LogisticRegression Classifier = LogisticRegression() Classifier.it(old_data, Y) Y_pred = Classifier.predict(new_data) Classifier.fit(new_data, Y_pred) Classifier.score(old_data, Y)

  • 요약
    • 데이터에 대한 정확도 평가하는 방법 필요
    • 의료 데이터는 검증 데이터 구하기가 어렵기 때문에 평가가 어려움. 평가가 제대로 안되면 오버피팅이 될 가능성이 있음
    • RCA를 통해 세분화의 정확도 판단

PR-009 : Distilling the Knowledge in a Neural Network

  • 힌튼이 발표한 논문
  • 앙상블의 계산 시간이 느리기 때문에 이런 것을 해결하기 위해 앙상블의 정보를 싱글 모델로 이전하는 것
  • Distilling
    • 앙상블의 정보를 싱글 모델로 이동시키는 것
    • 불순물이 섞였을 때 순수 물질만 남기는 것
    • 앙상블을 빠르게 학습하는 내용도 있는데 이건 다루지 않을게요
  • 뉴럴넷
    • 파라미터가 많아서 오버피팅이 생길 수 있음
  • 오버피팅을 피하기 위해 앙상블을 사용
  • 이니셜 파라미터를 다르게 하는 것이 효과가 있음
  • 단점
    • 저장 공간이 많이 들고, 계산 시간이 오래 걸림
    • 병렬 처리를 해도 모델의 개수가 코어 개수보다 많으면 더 오래 걸림
    • 모바일 폰엔 저장 공간 이슈로 사용 불가능
  • 딥러닝도 용량이 큼(VGG는 500메가쯤)

Distilling Ensemble : Single Model

  • 싱글, shallow한 모데을 만들고 싶음
    • 좋은 성능
    • 적은 계산 시간, 저장 공간이 조금만
  • 앙상블을 만들어 싱글 shallow에 전이
  • 1) 관측치가 많다면 앙상블을 쓰지 않아도 성능이 일반화될 것이다
    • over sampling ⇒ 레이블이 붙어있지 않은 상태로 진행
    • 기존에 학습된 앙상블 모델으로 예측 ⇒ 오버 샘플링된 데이터의 클래스에 레이블을 붙임
    • RMSE로 평가했는데, training size가 커질수록 성능이 좋아짐
  • 2) 클래스의 확률 분포를 알면 잘 학습이 되지 않을까
    • ba라는 사람이 제안
    • 레이블 대신 logit값을 줘서 분포를 알아보자
    • logit : 클래스의 점수, 확률분포
    • 로짓에 noise를 줘서 학습 ⇒ regularizer 역할
    • 다시 single shallow에서 학습
    • 힌튼은 soft max를 사용해 확률값 구함
    • 확률을 계산해서 학습하는 것이 regularizer라고 힌튼이 말했음
    • activation 함수를 sigmoid에서 softmax로 변환
    • 모든 확률값을 더했을 때 1이 되도록
    • temperature 도입
      • 이게 낮으면 logit이 큰 값에 대해선 확률값이 1이고 나머지는 0이 됨
      • 확률이 클래스가 1이 되면 확률 분포를 알 수 없음 (모두 1을 가짐)
      • 2~5 정도 사용
      • 너무 높으면 모두 같은 확률값을 가짐 (0.33)
      • 모든 경우에 대해 실험을 해봐야 함
    • cross entropy의 변형을 사용

실험 결과

결론

  • 앙상블만큼 좋은 성능을 가지고 적은 계산 시간을 가짐
  • softmax보다 logit이 더 좋았다고 말하는 중

PR-010 : Auto-Encoding Variational Bayes

  • Generative가 핫해지는 중
  • 레퍼런스가 다양하고 각자 설명하는 방식이 다 다름
  • 추천 글

Motivation(논문을 선택한 이유)

  • 제대로 이해해 보자!
  • 2014년 논문이라 Classic
  • 다양한 관점으로 해석이 됨
  • 수식이 어려워 보이지만 그렇게 어렵진 않음(학부 졸업생 수준으로 커버 가능)

Manifold hypothesis

  • 딥러닝 자체가 manifold에 기반
  • 우리가 다루는 데이터들이 사실은 저차원의 벡터 공간이 살고 있다
    • mnist가 784차원인데, 실제로 데이터는 작은 차원에 augmentation을 한 것
  • 그 공간을 찾아내자!가 generative 모델의 목표

Autoencoder

  • Input이 들어오면 hidden layer를 통해 다시 output이 생김
    • latent presentation을 학습

Linear Regression

  • 점들의 경향성을 찾는 것
  • 여기에 확률적 관점을 가미하면 점들의 확률 분포를 찾는 문제로 변형
  • 그래피컬로 표현 가능
  • Autoencoder가 선을 찾는 것이라면 variational autoencoder는 점들의 확률분포까지 찾아내는 것
  • 각 축(Z, X)을 고차원으로 높이면 latent representation 데이터를 찾아내는 것이 목표

이론

  • Maximum likelihood를 사용
    • 그러나 \(p_{x}\)를 모름, 체인룰을 사용해 전개해도 여전히 모름
  • Variational inference를 사용
    • 복잡한 \(p_{x}\)를 간단한 \(q_{x}\)로 근사하겠다
    • 어떤 확률 분포가 있고, 그걸 직접 계산하기 어려울 때 계산 어려운 것을 인정하고 단순한 확률 분포로 근사

Math

  • KL-divergence
    • 기본적으로 distance 개념인데 distance는 아니다..라고 말함
    • P,Q를 바꾸면 값이 달라짐
    • Distance 비슷한 것이다 라고 생각하면 될 듯
    • 확률 분포 P와 Q 차이를 구하는 것
  • 식 전개
      • 천천히 전개하고, 모르겠으면 영상 13분 참고
      • L을 최대화
      • 몬테카를로 q(zㅣx)로 샘플링한 값으로 L을 계산
      • 몇개를 뽑는거니 variance가 존재
      • 전개를 조금 다르게 하면, 애널리틱하게(수학적으로) 표현 가능
      • variance를 적게 가능
      • 전개할 때 2번째 식을 주로 사용
      • 논문의 어펜딕스에 있음
  • Reparametrization Tricks
    • 중간에 샘플링 과정이 있는데, 샘플링은 미분이 안됨
    • 그래서 샘플링을 밖으로 빼내고 표현력은 유지함

네트워크 구조

  • 평균과 시그마를 inference하고 x를 계산
  • stochastic autoencoder + regularization using prior
    • prior는 노말 정규 분포(0,1)로 가정

결과

  • Visualization 결과
  • 다 잘 찾는중
  • 벡터 스페이스 커지면 좋음
  • 왜 오토 인코더는 안될까?
    • prior를 걸어주지 않음

레퍼런스


PR-011: Spatial Transformer Networks

  • 2015년 닙스, 구글 딥마인드

Introduction

  • 동적으로 변하는 네트워크를 설계하겠다
  • CNN의 한계
    • spatial invariant하지 못하다
      • Scale, Rotation : No
      • Translation : 부분적으로
  • max pooling
    • 이게 spatial invariant하게 만들긴 하나 유동적이진 않음

Architecture

  • Localisation net : transformer 할 좌표를 찾음
    • 마지막단에 regression이 있어야 함
  • Grid generator : 좌표를 변환(Affine transform)
  • Sampler : 하나씩 읽어옴, interpolation
    • integer sampling
    • bilinear sampling
    • Differentiable image sampling : 미분 가능하도록!
  • multiple spatial transformer가 가능
    • 앞에, 뒤에, 병렬 등 다양하게 사용 가능

Experiment

  • MNIST
  • 번지 표지판
    • 앞단에 1개만
    • 중간에 여러개 넣음 (4개)
  • 새 200종

Conclusion

  • deformable을 offset을 계산을 따로
  • spatial은 트랜스폼의 파라미터만 찾아줌
    • 샘플링하며 intepolation할 때 계산량이 적음
    • 그러나 간단한 연산만 가능

카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza