Published / by greennuri

Markdown test
writing with Markdown is quick and easy. And reading Markdown is just as nice!

  • It’s just plain text.
  • No need to use the mouse.

강화학습 #2

Published / by greennuri

강화학습 #2

MDP(Markov Decision Process)

MDP는 이전 포스트에서 상태, 행동, 보상, 정책으로 구성 되어 있다고 적었는데

더 정확히 말하면 MDP는 [상태, 행동, 보상, 상태변환확률, 감가율]로 구성 되어 있습니다.

개별 요소에 대해 더 정확히 풀이 하면 다음과 같습니다.

이해를 간단히 하기 위해서 그리드 월드(격자로 표현 가능한 세상)를 중심으로 표현 합니다.

*상태

  • 그리드 월드에서 상태는 에이전트가 위치한 좌표를 의미 합니다.
  • 5*5 격자 그리드 월드 일 경우 나올수 있는 경우의 수는 25가지가 됩니다.

\(S = {(1,1),(1,2),(1,3),,,(5,5)}\)이 됩니다.
\(s_t\)
$$s_t$$
그리고 어떤 특정 시간 \(t\)에 상태값을 표현 하는 것은 \(S_t\) 로 표현하고, 이 값이 \((1,3)\)일때 다음과 같이 표현 됩니다.

\(S_t = (1,3)\)

내일 저녁에 다시~

강화학습 #1

Published / by greennuri

기계학습

  • 지도학습(Supervised Learning) : 주어진 데이터와 정답이 있어서 데이터를 통해서 정답을 판별하는 패턴을 학습
    • 분류기(Classification), 회귀분석(Regression)
  • 비지도 학습 (unsupervised Learning): 주어진 데이터를 개별적인 기준으로 비슷한것 끼리 묶는것.
    • Cluster, Topic Modelling
  • 강화학습(Reinforcement Learning) : 보상(Reward)을 통해 학습 하는 일련의 과정
    • 어떠한 환경에서 에이전트(즉 컴퓨터)가 어떤 행위를 통해 목표를 구행해 가면서 그 과정에서 보상을 받고 그 보상(보상이 긍정적인 것만 있는것은 아님, 때론 부정적 보상도 받음)을 통해 학습을 이루어 나감.
      흔히 강화학습에 대한 슬라이드 보면 스키너의 행동 심리학 실험(스키너 상자)을 주로 예를 든다.
      내용은 실험실에서 쥐에게 어떤 특정 버튼을 누르면 쥐가 좋아하는 먹이를 주게 하여 그 버튼을 계속 누르게 하는 보상을 통해 행동을 강화(Reinforcement)하는 실험을 이야기 한다.
      해당 내용 링크(스키너 상자)[https://www.youtube.com/watch?v=R4iK1rZKu4I]

    아래 그림은 강화학습을 간략히 표현한 그림.

    강화학습

    강화 학습은 어떠한 환경과 에이전트(컴퓨터)가 주어지고 에이전트가 어떤 상태에서 다음 상태로 가기 위한 어떤 행동을 수행하면, 그 결과로 보상을 받으면서 계속 자신의 상태와 행동을 계속 수행해서 목적한바를 수행 하는 과정을 의미. 강화학습은 이 과정을 모사하여 학습을 하고, 재현하는 것을 의미

강화학습은 어떤 문제를 푸는 과정을 모사하고 학습

이를 위해서 문제가 정의 되어야 하는데 이 문제는 순차적 행동 결정 문제이어야만 가능.

순차적 행동 결정 문제는 어떤 행동을 행하는데 있어 순서가 있고 지금 할수 있는 행동이 이전에 영향을 받는것을 의미.

간단히 말해서 동전을 100번 던져서 앞 뒤가 나올 확률은 순차적 행동 문제가 아님, 왜 냐면 동전을 10번째 던지나, 20번째 던지나 나오는 확률값은 똑같기 때문이다.

순차적 행동의 예제는 유명한 알파고나, 아케이드 게임처음 이전 혹은 지금의 행동이 다음의 내 행동에 영향을 주는 경우를 의미

이러한 순차적 행동을 풀기 위해서 마코프 의사결정 과정(Markov Decision Process)을 통해 문제를 수학적으로 정의 한다.

마코프 의사 결정과정은 마코프 과정(Markov Process)의 한 분류로서, 마코프 과정은 시간축에 따라서 상태가 변하는 것을 확률 개념으로 추론하여 시간의 변화에 따른 상태의 변화를 확률적으로 표현한다.

마코프 과정

상태 관측 가능 상태 관측 불가
상태 변화가 자동적(No Agent) Markov Model Hidden Markov Model
상태가 행동에 의해 바뀜(Single Agent) Markov Decision Process Partially Observable Markov Decision Process

kind of markov processes

위에서 보듯이 마코프 과정은 상태 변화가 자동적으로 이루어지고 모든 상태가 관측 가능하면 마코프 모델로, 상태가 숨겨지면 은닉 마코프모델로 모델링한다.

상태 변화가 자동적, 행동에 의해 바뀜의 차이는 상태와 상태 사이에 행동이라는 과정이 있냐 없느냐의 차이이다 .

강화학습은 마코프 의사결정 모델을 통해서 상태와 상태의 변화에 행동이 포함이 된다.

강화학습에서는 에이전트(컴퓨터)와 환경사이의 상호작용으로 학습을 수행한다.

강화학습을 마코프 의사결정 모델을 통해 처리 하기 위해서는 다음과 같은 값들이 필요로 하다.

에이전트가 움직일수 있는 환경이 그리드 월드라고 가정하면 다음과 같이 설명 할 수 있다.

그리드 월드 : 정사각형 좌표위에서 한칸씩 움직여서 원하는 위치로 옮길수 있는 환경

  1. 상태
    1. 에이전트의 상태 값. 에이전트가 현재 그리드 월드 위에서 어디에 있는지 나타내는 좌표값
  2. 행동
    1. 상태에서 할수 있는 행동의 집합, 그리드 월드에서 상하좌우로 움직일수 행동을 결정 할수 있으므로, 행동은 상하좌우가 된다.
    2. 에이전트가 행동을 취하면 환경은 상태를 변경시키고, 보상을 주게 된다.
  3. 보상
    1. 그리드 월드에서 어떤 행동을 선택 했을때, 그 행동에 대한 보상,’
    2. 보상은 꼭 긍정적이지만은 않다 경우에 따라서는 부정적인 보상을 받기도 한다.
    3. 보상은 상태 변화에 대한 보상이 아니라, 행동에 대한 보상’
  4. 정책
    1. 어떤 상태에서 어떤 행동을 취할것인가에 대해 결정 하는 과정을 정책이라고 한다.

좀더 엄밀히 말하면 이외에 여러가지 다른 변수를 포함하여 순차적 행동 문제를 모델링 한다.

pycharm으로 원격 디버깅 하기

Published / by greennuri

https://www.jetbrains.com/help/pycharm/remote-debugging.html

https://www.jetbrains.com/help/pycharm/remote-debugging-with-pycharm.html#remote-interpreter

jetbrain의 pycharm은 여러가지 기능이 많은데 그중에

최근에 알게된 원격 디버깅을 잠시 소개

이 기능은 쓰고 있는 컴퓨터의 파이썬이 아니라

원격지에 있는 (아마 주로 서버) 파이선을 이용해서 디버깅을 수행 할 수 있게 해주는 기능이다.

상용 방법은 간단하다

prefenrence -> project -> project interpreter에서
project interpreter에서 원격지에 있는 인터프리터를 설정 하면되는데

이 설정과 ssh tunneling을 활용하면 상당히 편리하다

나중에 좀더 고칠 예정..

액티베이션 함수 정리 링크

Published / by greennuri

기계학습에서 학습을 위해서 코스트 함수를 정의하고
그 값이 작게 하기 위해서 최적화를 수행한다

일반적으로 가장 기본이 SGD(stochastic Gradient Descent)인데, SGD를 쓰는 이유는 지도학습에서 입력 되는 모든 데이터를 가지고 만든 커브에서 최적화를 하기위해 Gradient Descent(경사하강법)을 쓰면 되지만, 모든 데이터를 다 메모리에 올리고 코스트를 구하는건 엄청난 물리적으로 어렵다(100만 이상 이미지에서 10103에 네트워크 깊이만큼 용량이 커지면, 요즘 나오는 그래픽카드에 다 올리는건 어렵다… 용량이 넘사벽.. )

그래서 보통 딥러닝 학습을 할때 mini-batch를 수행한다.
mini-batch는 학습 하고자 하는 전체 데이터를 샘플링해서 모집단을 충분히 반영 가능한 작은 데이터를 추출해서 학습을 반복 수행한다.

SGD는 미니배치 단위로 GD(경사하강법)을 수행한다. 전체 데이터에 대한 GD(경사 하강법)에 비하면 오차가 있지만, 미니배치를 반복 수행하면서 전체 데이터로 만들어 지는 GD값에 수렴한다고 한다.(cs231n 3,6,7강 참고)

그런데 SGD는 1-st order optimization(1차 미분 최적화)중에서 가장 간단해서, local minima, saddle point라는 함점에 빠지기 쉽다.

그래서 이러한 함정에서 빠져 나오기 위해 관성(momentum)을 적용한 것이 momentum Optimizer이고, momentum 적용을 다른 방법으로 적용한게 Nesterov 모멘텀 (Nesterov Momentum)이다.

그리고 Momentum외 다른 여러가지 방법으로 최적화 방식을 만들어 낸게 adam, rmsprop, adadelta 등등이 있다.
(링크)[http://shuuki4.github.io/deep%20learning/2016/05/20/Gradient-Descent-Algorithm-Overview.html]참고

워낙 설명 잘 된 자료가 많아서.. 링크만 몇개 올림.

(최적화기법의 직관적 이해)[http://darkpgmr.tistory.com/149]

우분투 새로 설치하고 tensorflow 설치하기

Published / by greennuri

기계학습용으로 우분투를 새로 설치하고 tensorflow 설치 하는 과정

차후에 사용하기 위한 내용 요약

이곳에서 우분투를 다운로드

왠만하면 LTS 버젼으로 다운로드 받고, 경우에 따라서 Server나 Desktop 버젼을 다운로드한다.
Server버젼은 Desktop 그러니깐  UI가 없는 버젼. 
Desktop이 설치되어 있더라도 로컬에서 데스크탑으로 쓰지 않으면 그래픽 메모리 손실은 발생하지 않는듯. 

부팅 이미지 만들기

참조 링크

간략 정리
1. iso 이미지를 맥용 이미지로 변환 
    ./hdiutil convert -format UDRW -o ~/desktop/ubuntu.img ~/desktop/download.iso

2. usb를 언마운트
    diskutil unmountDisk /dev/disk[번호]

3. usb에 저장 이미지 업로드 
    sudo dd if=~/desktop/ubuntu.img of=/dev/disk[번호] bs=1m

nvidia 그래픽 드라이브 설치

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-last

위 절차대로 제대로 깔리면 nvidia-smi 명령어를 실행 시키면 그래픽 카드 종류와 메모리 용량이 표시 됨

리눅스에 개발환경 설치

sudo apt-get install 'Development Tools'
sudo apt-get install python-dev
sudo apt-get install git # git 

anacoda 설치

    우분투에 python이 이미 있는데도 anaconda를 설치 하는 이유는 시스템에 영향을 줘서 시스템이 망가지는것을 방지 하기 위해서...
    anaconda는 이곳에서 (다운로드)]https://www.anaconda.com/download/#macos
    anaconda 설치후 가상 환경 만들기 
    conda create --name $ENVIROMENT_NMAE $PREINSTALL_PACKAGES 
    $ENVIROMENT_NAME : 가상환경 이름 
    $PREINSTALL_PACKAGES : 기본 설치할 패키지명 
    
    conda create --name tf tensorflow-gpu 
    위와 같이 입력 하면 tf라는 이름의 가상환경이 만들어지고 기본으로 tensorflow-gpu가 설치됨. 
    
    conda 가상 환경을 쓰면 좋은 점 [링크](https://graspthegist.com/post/learn-conda-1/)
    

필수 패키지 설치

    필수 패키지를 설치 하기전 가상 환경으로 진입.
    source activate $ENVIROMENT_NAME
    conda install opencv #opencv 설치 
    conda install nltk #nltk 설치
    그외 여러 패키지 설치 

CNN. week1 Edge Detection Example

Published / by greennuri

앤드류응 교수의 코세라 강의 CNN 정리.
week 1.
Edge Detection

Edge Detection

CNN에서 가장 처음인 Edge Detection에 대한 설명.

수직 경계선 추출

왼쪽의 임의의 6,6 이미지(그레이)에 3,3 필터를 콘볼루션 시키면 4,4가 나옴.
3,3 필터를 보면 1열이 1이고, 2열이 0이고 3열이 -1, 수직으로 경계선을 추출하기 위한 수직 경계선 추출 필터

좌측에 필터를 적용해서 결과를 오른쪽 행렬에 반영한 결과가 보인다