카테고리 보관물: 기계학습

기계학습 관련 자료

jupyter ubuntu linux daemon으로 설정하기

Published / by greennuri

ubuntu에서 jupyter daemon으로 설정하기

다음과 같은 방식으로 서비스 설정 파일을 작성한다.

위치 : /etc/systemd/system/
파일명 : ipython-notebook.service

내용

  • Unit
  • type=simple
  • PIDFile=/var/run/ipython-notebook.pid
  • ExecStart=/usr/bin/ipython notebook –no-brower
  • User=ipynb
  • Group=ipynb
  • WorkingDirectory=/home/ipynb/notebooks
  • Install
  • WantedBy=multi-user.target

위의 설정 파일에서는 서비스를 돌리는 계정과 그룹을 ipynb로 정의 하고 있다. 그러므로 계정을 추가 해야 한다

  • useradd ipynb
  • su – ipynb
    cd $IPYNB HOME ipynb로 계정 전환후 ipython 홈 디렉토리로 이동한다.
    systemctl daemon-reload
    systemctl enable ipython-notebook
    systemctl start ipython-notebook

위와 같이 설정하면 동작하는데 다음과 같은 오류가 발생할수 있다.
OSError: [Errno 13] Permission denied: '/run/user/1000/jupyter'

외와 같은 오류가 발생시 XDG_RUNTIME_DIR 값을 설정해재 하면 처리 됨. 관련 깃허브 이슈

그외에 다른 링크 공유

강화학습 #2

Published / by greennuri

강화학습 #2

MDP(Markov Decision Process)

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

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

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

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

*상태

  • 그리드 월드에서 상태는 에이전트가 위치한 좌표를 의미 합니다.
  • 5*5 격자 그리드 월드 일 경우 나올수 있는 경우의 수는 25가지가 됩니다.
  • \(S = {(1,1),(1,2),(1,3),,,(5,5)}\)이 됩니다.
  • 그리고 어떤 특정 시간 \(t\)에 상태값을 표현 하는 것은 \(S_t\) 로 표현하고, 이 값이 \((1,3)\)일때 다음과 같이 표현 됩니다.
  • \(S_t = (1,3)\)
  • 어떤 상태 t에서의 상태 \(S_t\)는 정해져 있지 않습니다. 때에 따라서 \(t=1\) 일 때 \(S_t = (1,3)\)일 수도 있고, \(S_t=(4,2)\)일 수도 있습니다. 이러한 것을 확률 변수라고 합니다.
  • \(S_t=s\) 이 식은 “시간 \(t\)에서 상태 \(S_t\)가 어떤 상태 \(s\)다를 표현
  • 행동
  • 에이전트가 상태 (S)일 때 할수 있는 행동의 집합은 (A)
  • 행동 집합 (A)의 한 원소는 (a)로 표현.
  • 어떤 특정 시간 (t)에서 하나의 행동은 (A_t=a)로 표현
  • (A_t)는 어떤 특정 시간(t)에서 선택할 행동, 어떤 행동을 할 것인지를 정의한것이 아니기 때문에 전체집합(A)으로 표현
  • 그리드 월드에서의 행동은 다음고 같다
  • (A = {up,down,left,right})

강화학습 #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. 어떤 상태에서 어떤 행동을 취할것인가에 대해 결정 하는 과정을 정책이라고 한다.

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

액티베이션 함수 정리 링크

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, 수직으로 경계선을 추출하기 위한 수직 경계선 추출 필터

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

기계학습 평가 척도. precision recall

Published / by greennuri

엄태웅님의 youtube 링크

여기서는 preision, recall에 대한 설명 보다 왜 이런 평가 지표를 쓸가에 대해서 잘은 모르지만 최대한(제 나름) 설명 하려고합니다.

일반적으로 지도학습(대부분 지도학습 이지만 ^^)에서 성능을 평가 하는 척도는 정확도 (accuracy)인데요.

deep learning이나 machine learning 예제로 나오는 코드 보면 거의 대부분 정확도(acc)라는 지수로 모델의 성능이 좋다 나쁘다를 평가 합니다.

cnn쪽에서는 예외적으로 top-1 error, top-5 error을 쓰는데요 우선 그것은 제외하겠습니다.

acc(정확도)는 고양이 사진 100장, 개 사진 100장 이 있고 고양이 사진은 90장, 개 사진은 90장으로 판별 했다고 볼때, 180(맞춘 전체값) / 200(전체 데이터셋 크기) 해서 90%의 값이 나옵니다

acc(정확도)는 전체 데이터 중에서 정답을 맞춘 비율을 의미합니다.

더 자세한 정의는 여기 참고 하세요

그런데, 고양이랑 개 사진은 애호가가 많아서 인터넷에서 엄청 찾을 수 있는데, 좀 드문 수달도 같이 학습 시켜서 고양이 사진 100장, 개 사진 100장, 수달 사진 10장으로 기계학습을 시켜서 고양이 사진 89장, 개 사진 85장, 수달 사진 1장을 제대로 인식 했다고 하면 전체 인식률은

89(고양이) + 85(개) +1(수달) / 210(전체) = 83.333 약 83% 나옵니다

그런데 수달은 10장 중에 1장만 제대로 인식 했는데 전체 정확도는 83%입니다

뭐가 이상하지 않나요?

문제를 더 간단히 해보면

고양이 사진 90장, 수달 사진 10장으로 어떤 모델을 학습하고,  제대로 인식된 고양이 사진이 80장, 수달 사진이 3장 이면 정확도는

80 + 3 / 100 = 83 % 정확도

수달은 10장 중에 3장만 제대로 뽑아 냈는데, 정확도는 83% ???

이러한 경우는 학습 시키는 데이터의 수량이 비슷하지 않아서 생기는 문제입니다. 이러한 경우 정확도가 아닌 다른 평가 척도를 가져와야 하는데 그중 대표적인데 precision, recall, f1입니다. 자세한 설명은 링크를 통해 들어보세요

설명을 워낙 잘 하셔서 링크로 대신합니다.