Week1 - Day 5 Review


오늘 하루 한 것

  • 정리
    • RNN
    • 딥러닝 기초

피어세션에서 한 것

  • 무어 펜로즈 역행렬 간단하게 설명하기
  • 일주일 회고

주말에 할 것

  • 추가 정리
    • 정규식
    • pickles
    • __init__.py, __main__.py
    • numpy, pandas 정리
    • KL diverence
    • 여러가지 활성함수

하루 느낀점

  • 마지막 날이지만 주말에 정리할게 많다.

Week1 - Day 4 Review


오늘 하루 한 것

  • 강의
    • 모든강의 다 끝냄
  • 과제
    • 심화과제 완료
  • 정리
    • 통계학
    • 베이즈 통계학

피어세션에서 한 것

  • 선형회귀 경사하강법에 대한 질문

내일 할것

  • 정리 마무리!
  • 과제회고
  • 피어세션 질문 정리

주말에 할 것

  • 추가 정리
    • 정규식
    • pickles
    • __init__.py, __main__.py
    • numpy, pandas 정리
    • KL diverence

하루 느낀점

  • 생각보다 많이 정리하지는 못했다
  • 제출은 안하지만 답지 받기전까지 끝내고 싶어서 심화과제에 시간을 많이 투자했다

Week1 - Day 3 Review


오늘 하루 한 것

  • 강의듣기
    • Ai Math 5강까지
  • 과제
    • Gradient Descent 완료
  • 정리
    • 경사하강법 완료
    • python 5-1까지 정리 완료

피어세션

  • numpy dtype float32 최대 최소값에 관해서
    • int형은 단순 비트계산이지만 float형은 부동소수점형으로 지수비트와 유효자리비트로 나뉘어있기 때문에
    • int형 -> 정확함
    • float형 -> 자세히보면 잘라먹음

내일 할것

  • 역전파, 통계, CNN, RNN 정리
  • 심화과제 2, 3

주말에 할 것

  • 추가 정리
    • 정규식
    • pickles
    • __init__.py, __main__.py
    • numpy, pandas 정리

느낀점

  • 아직도 할게 많다… 정리 빨리 끝내고싶다

Week1 - Day 1&2 Review


오늘 하루 한 것

  • Day1
    • 팀원들과 아이스 브레이킹
    • 강의 듣기 (python 2-4까지)
    • 노션 회고록 Template 만들기
    • 과제
      • Basic Math
      • Text Processing 1
      • Text Processing 2
  • Day2
    • 강의듣기
      • python 강의 완료
      • Ai Math 경사하강법까지 완료
    • 과제
      • Gradient Descent 하는 중
      • 기본퀴즈 1~5강
    • python 3-2강 까지 정리

피어세션에서 한것

  • Day1
    • 피어세션 그라운드 룰 만들기
  • Day2
    • python 메모리 관리에 대한 질문
    • 구조체 메모리 점유에 대한 질문

내일 할것

  • 심화과제 끝내기
  • 과제과정, 결과 + 정규식에 대해서 정리해보자

느낀점

  • 어떻게 해야 남이보기 쉽게 설명할수 있을까? 정리하는데 시간이 오래걸린다.
  • 1일차 한 내용이 많아서 하루만에 정리하기 쉽지 않았다. 예전에도 한번 시도했지만 꾸준히 정리해야 할맛나는것 같다. 쌓이면 쌓일수록 답이없다…..
  • 매일 적당한 양을 공부하고, 정리할것
  • 알아도 정리하자!

10-12-TD

10/12일

WGAN을 읽으면서 아직 이해못한 부분들을 이해하기 위하여 GAN 논문의 Loss 함수부분을 중점적으로 읽어보았다.

GAN 논문 요약

  • GAN 논문은 Discriminative model $D$ 와 Generative model $G$로 이루어져서 $D$는 생성된 이미지와 원본 이미지를 구별해 내는 방향으로 학습, $G$는 $D$가 생성한 이미지와 원본 이미지를 구별하지 못하도록 학습시키는 것을 목표로 한다. -> 두 모델이 적대적으로 학습하는 방식이기 때문에 Generative Adversarial Nets(생성적 적대 신경망)이라고 이름이 붙었다.
  • 최종적으로 생성한 데이터의 분포를 실제 데이터의 분포에 가깝게 만드는것을 목표로 한다.
  • Kullback-Leibler divergence(KL divergence)를 기반으로한 Jensen Shannon Divergence(JS divergence)를 사용한다. (KL divergence는 비대칭적이기 때문에 metric으로 사용하기 부적절하다)

WGAN 논문 요약

  • 기존 GAN Loss function을 개선하여 GAN의 성능을 끌어올린 논문이다.
  • JS divergence는 두 확률분포(생성한 데이터, 실제 데이터의 확률분포)가 겹치지 않을때 상수값 $log2$를 가진다.
    • 이것은 데이터분포간의 거리가 아무리 멀거나 가깝거나 상관없이 겹치지 않으면 상수값을 가지기 때문에 학습이 제대로 이루어지지 않을 가능성이 높다.
    • 기존의 GAN 모델에서는 겹치는 부분을 만들어주기 위해 노이즈를 추가하여 데이터의 분포를 강제적으로 늘려주었다. -> 생성된 이미지가 흐려지거나 하는 문제들이 발생함
  • 그래서 WGAN에서는 Earth Mover distance 라는 거리 mertics를 제시하였다.

자세한 부분은 따로 포스트를 할 예정이다.

10-11-TD

10/11일

주말동안 stargan + Wasserstein GAN(WGAN) 논문을 정독해서 읽기 시작하였다.
multi domain image to image Translation 을 실현시킨 Stargan과 GAN의 loss함수를 Earth Move distance(EMD)로 설정을 하여 Discriminator 와 Generator 간의 불균형 문제를 해결한 WGAN에 대하여 간략하게 정리하려고 한다.(요약이 아닌 리뷰포스트는 현재 WGAN을 보면서 작성중이다.)

StarGAN논문 요약

  1. 여러 domain 간 변환을 1개의 Generator를 이용하여 변환할 수 있는것을 목표로 하는 논문이다.
  2. Discriminator는 Real/Fake를 판단하는 것 뿐만아니라 domain Classfication(이 이미지가 어떤 domain에 속해있는지)까지 학습 해야한다.
  3. 두개의 Generator를 사용하여 Cycle을 형성하여 학습하는 CycleGAN과 달리 하나의 Generator로 Fake image를 생성, Fake image와 기존 Source Image의 도메인 정보를 이용하여 다시 재구성을 하여 사이클 구조를 이룬다.
  4. 그래서 3개의 Loss function을 조합하여 Generator와 Discriminator를 학습시킨다.
    • $\mathcal{L}_{abv}$ 는 Adversarial Loss(minmax Loss) : 기본적인 GAN Loss, Cross Entropy에서 가져와 변형시켜서 만들었다. 실제로 학습시킬때는 WGAN의 EMD를 변형시켜서 Loss function 으로 사용했다.
    • Domain Classification Loss : Classfication loss(Cross Entropy Loss)
    • Reconstruction Loss : CycleGAN의 Cycle consistency loss를 사용(생성된 이미지를 다시 원래 source 이미지로 되돌렸을때 발생하는 차이에 대한 척도)

stargan
https://arxiv.org/abs/1711.09020

WGAN은 좀 더 시간이 필요할듯 하다.
막상 요약해서 쓰려고 하니까 수학적 베이스가 많이 필요한데 아직 내가 정리할 정도로 이해를 한것 같지 않다.

+오늘 공부 하면서 조금 더 조사해봐야겠다 생각되었던 부분

  • OS 어떤구조를 가지고 있는지 (Linux, Windows에 관하여 이왕이면 차이도 조사하면 좋을것 같다) : 내부의 프로세스, 스케줄링, 페이징 교체 작업 같은 세부적인건 어느정도 설명이 가능한데 os가 전체적으로 어떤 구조인지 이야기 하라고 하면 못 할것 같다.
  • 커널에 대해 지식이 부족함을 느꼈다. 대략적으로는 아는데 자세하게는 못말하는 느낌이다. 한번 자세히 조사할 필요가 있다고 생각한다.
  • 각종 Loss 함수에 대한 공부(이 함수가 어디에서 비롯되었는지 궁금해졌다.)
  • Duality 등의 WGAN에 대한 수학적 베이스에 대한 공부(Lipschitz조건, Kantorovich-Rubinstein duality)

10-07-TD

10/07일

오늘도 gitlab에서 CI/CD pipeline 구축 체험을 해보았다. (CI/CD에 대해 조금 알아보았는데 지금하는건 체험 수준)
오늘 작업을 하면서 알게된점에 대해서 적어보려한다.

gitlab에는 안전한 업데이트(?)를 위한 기능으로 protected branch, protected tags를 지원한다.

protected branch

마스터, 메인브랜치 같은 언제나 잘 작동하는 올바른 코드가 올라가 있어야 하는 브랜치를 특정 행동으로부터 보호하기 위한 조치이다.
protected branch로 설정하면 항상 올바른 커밋을 push나 merge 하기 위해 룰을 지정할 수 있다.
ex) Pull Request를 merge하기전에 항상 코드리뷰를 n명의 리뷰어에게 거쳐야 하거나, CI 테스트를 통과한 브랜치만이 merge가능하다.

protected tags

protected branch와 비슷하게 잘못해서 코드를 업데이트 하거나 삭제하는것을 예방할수 있다.
gitlab 에서 Protected tags는 삭제하는것이 불가능하다.(강제로 할 수는 있는데 권장하지 않음)
보통 CI/CD를 통과하고 release할 branch에 release version으로 tag를 단다.
직접 protected tags로 지정하거나, wildcrads를 이용하여 특정 규칙을 만족하면 protected tags로 설정하는것이 가능하다.

CI(Continuous Delivery)

CI(지속적인 통합)이라고도 한다. CI를 통하여 개발자들은 협업을 하면서 코드의 변경 사항을 공유브랜치로 병합하는 작업을 더욱 수월하게 수행할 수 있다.
개발자가 push한 변경사항이 병합될때 이 변경사항이 기존의 애플리케이션을 손상시키지 않도록 pipeline을 통한 테스트를 한다.

CD(Continuous Delivery or Deployment)

CD(지속적인 제공)는 유효한 코드를 repository에 자동으로 릴리즈한다.
CD(지속적 배포)는 repository에 릴리즈된 유효한 코드를 자동으로 실행하는것을 말한다.
애플리케이션을 배포할때 애플리케이션 전체를 한번에 실행하는것이 아닌 작은조각(모듈)으로 나누어 실행하면 좀더 리스크 관리를 하기 쉬워진다.

image

출처

RedHat - what is ci/cd

10-06-TD

10/06일

오늘도 어제에 이어서 gitlab에서 project의 CI/CD pipeline를 설정하는데 시간을 들였다.
어제 하루동안 잘만 돌아가던 gitlab runner가 영문을 알수없게 갑작스럽게 터진데다가 몸상태가 좋지않아서
bulid까지만 성공시키고 unittest는 성공하지 못하고 중간에 기절해서 자버렸다.
dind 방식에서 unittest를 어떻게 사용해야할까 고민해 보았는데

1
docker run --entrypoint

명령어를 이용하여 내부에 있는 unittest용 파일을 python을 통하여 활성화시켜주는 방향으로 할 생각이다.
오늘은 docker 관하여 공부했었는데 아직 글을쓰기까지 조금 시간이 걸릴것 같다.

10-05-TD

10/05일

KDT에서 만든 프로젝트를 Gitlab runners 를 이용하여 pipeline을 구축하는 연습을 하였다.
모듈별로 각자 runner를 이용하여 pipeline을 구축하여 unittest를 해서 제대로 돌아가는지를 판단한 뒤
추후에 runner를 하나로 묶어서 프로젝트를 배포할 예정이다.
+강화학습 Policy Gradient에 대하여 정리중

오늘 발생했던 문제

docker in docker 를 사용하는데 자꾸 host를 못잡는 현상이 벌어짐

원인

Docker의 Container는 기본적으로 Host에서부터 독립된 namespace를 가지고 있어서 Host시스템에 주요자원에 접근할 수 없음
우리는 Docker in Docker구조로 생성하였기 때문에 내부의 컨테이너가 아무리 애를 써도 docker host에 접근 할 수 있는 권한이 없다.

해결방법

docker 의 privileged 옵션을 활성화 시켜서 host의 자원에 접근할수 있도록 해준다

추가로 찾아볼 것

dind(docker in docker)

10-04-TD

10/14일

오늘은 GAIL(Generative Adversarial Imitation Learning) 논문을 읽기 시작했다.
이 논문을 읽기전에 여러 기초 지식들이 필요하다는것을 뼈저리게 느꼈지만 일단 헤딩하는 느낌으로 논문을 읽어나가면서 부족한 지식을 채워나가는 방식으로 글을 작성하려한다.
지금까지 이해한 부분 간단하게 3줄 요약

  • GAIL은 imitation learning의 방법중 하나로써 기존의 Inverse Reinforce Learning(역강화학습 : 전문가의 행동데이터를 기반으로 Reward function을 복원하여 최적의 Policy를 얻어내는 학습)의 단점인 전문가의 행동데이터에서 간접적으로 학습을 하기때문에 소요시간이 크다는 점을 해결한 논문이다.
  • imitation learning과 GAN의 유사점에서 착안하여 데이터로부터 직접적으로 Policy를 학습함
  • GAN과 비슷하게 Discriminator와 Generator(논문상에서는 TRPO)가 존재한다.
  • Generator는 점점 더 샘플링된 전문가의 행동처럼 움직임을 결정하게 학습을 한다.
  • 다른 역강화학습에 비해 상대적으로 적은양의 샘플로도 좋은 성능을 내었음

아직 수직적으로는 이해하지 못한부분이 많아서 여러번 정독을 해야할것 같다. 그리고 역강화학습 자체도 내가 대략적으로 개념정도만 공부한 상황이라 논문을 이해했다고 이야기 하기 위해서는 더 조사할 필요성을 느낀다.
관련된 지식에 대하여 포스트를 작성할 계획이다.

Paper

https://arxiv.org/abs/1606.03476

+정리한 CS 지식

Array & ArrayList & LinkedList