State, Action, Reward


자율주행 인공지능 

1. State

(1) 도로

(2) 차의 위치와 속도


2. Action

(1) Steering

(2) Accel

(3) Break


3. Reward

(1) 잘 갔는지


Agent => action->Environment-> Reward, state -> Agent


입력에 따라 State가 변함

State 가 안변할 수도 있음


써튼 교수님 책 - Slot machine - state가 안변하는 대표적인 사례


최종 목표

Rewards를 최대화 하는 Action 을 구하라



(1)  Return - Action At 이후에 받은 모든 Reward의 총합

- but 끝이 없는 task라면?? - 연날리기? 

(2) Continuous task 

- Discounted Return 을 최대화 하는 행동을 찾음

(3) Gt = Rt + rGt+1

(4) Value Function

- 어떤 state에 놓여 있을 때 expected discounted return (기대 값)을 최대로 


(5) Bellman Equation - 굉장히 많이 씀

(6) Markov Decision Process?

(7) Monte Carlo Method

- 뭐라도 해본다.

- 단점 : Episode가 끝나야만 알 수 있다.

(8) Q Function

State에서 어떤 Action을 취했을 때의 return

(9) Policy Based 

- State에서 최적의 Action을 알려줌


(10) Deep Deterministic Policy Gradient




Posted by 공놀이나하여보세
,

https://gist.github.com/haje01/0fb6d63bf065c9831256



Posted by 공놀이나하여보세
,
가장 빨리 만나는 딥러닝 WITH CAFFE

CUDA Install

http://pythonkim.tistory.com/71

Caffe 설치 시 생기는 문제들은 아래 블로그를 통해 대부분 해결됨
http://iamyoonkim.tistory.com/6

쉘 내부
1. 솔버의 파라미터 : lenet_solver.prototxt
(1) net : 네트워크의 파라미터 파일로 파일 버스를 지정 
lenet_train_test.prototxt 
(2) test_interval: 학습 중 테스트를 실행하는 간격
(3) base_Ir : 학습 시 학습률의 초기값 지정
(4) display : 학습 시 경과를 나타내는 간격
(5) max_iter : 학습을 실행하는 최대 회수 지정
(6) solver_mode : 학습 시 cpu 또는 gpu 선택


2. 네트워크의 파라미터 : lenet_train_test.prototxt

[공통]

(1) name : 계층의 이름을 지정

(2) type : 입력층, 은닉층 타입 지정


[입력층]

(1) top : 입력 데이터와 지도 학습 데이터를 각각 지정

(2) include 

      - phase : 학습 시 또는 테스트 시 어느 경우 그 계층을 이용할 것인지 지정 - TRAIN, TEST

(3) data_param

      - source: 읽기 데이터의 파일 버스를 지정


[은닉층]

(1) Type: "Convolution"은 컨볼루션층을 나타내는 타입

      - bottom: 입력이 되는 계층 지정

      - top : 출력이 되는 계층 지정

      - convolution_param: 컨볼루션층의 파라미터를 지정

              num_output: 컨볼루션층에서의 출력 횟수

              kernel_size: 컨볼루션 창의 크기를 지정

              stride: 컨볼루션 창의 움직이는 크기 지정

(2) Type: "Pooling"은 풀링층을 나타내는 타입

(3) Type: "InnerProduct"는 전결합층을 나타내는 타입


[활성화 함수]

Tanh, Sigmoid, ReLU


[출력층]

Accuracy : 정밀도 산출 

SoftmaxWithLoss : 정밀도 산출




'Machine Learning > Caffe' 카테고리의 다른 글

Docker를 이용해 Caffe 설치  (0) 2018.02.03
Posted by 공놀이나하여보세
,

Object Detect - Tensorflow 이용

https://github.com/MarvinTeichmann/KittiBox


Digits Object Detect - Caffe Digits 이용

https://github.com/NVIDIA/DIGITS/tree/master/examples/object-detection



http://goodtogreate.tistory.com/588



ImportError: No module named nets


export PYTHONPATH="$PYTHONPATH:/home/jaehyeuck/tensorflow/models/slim" 




fastmaskR CNN

https://github.com/CharlesShang/FastMaskRCNN


Posted by 공놀이나하여보세
,

http://pythonkim.tistory.com/71


우분투 무한 로그인


apt로 nvidia-current 를 설치할 경우 무한 로그인에 빠져들 수 있습니다. 

이럴 경우 로그인 화면에서 tty 화면으로 이동합니다.


ctrl + alt + f1


여기에서 로그인 후 기존에 설치된 드라이버를 모두 삭제하고 375 버전을 설치합니다.


sudo apt-get purge nvidia-*

sudo add-apt-repository ppa:graphics-drivers/ppa

sudo apt-get update

sudo apt-get install nvidia-375


그 이후 reboot 명령으로 재시작을 하면 문제 해결~



출처: http://mikelim.mintocean.com/entry/Ubuntu-1604-Nvidia-드라이버-설치-후-무한-로그인-될-경우 [Simple is best]



Posted by 공놀이나하여보세
,

간단하게 물체인식을 진행할 일이 있어서 Google Vision API를 사용해보게 되었다

이미 잘 해두신 분이 있어서 그걸 따라해본 것을 정리해보고자 한다


일단 google vision api 를 사용할 수 있도록 계정에서 활성화 시켜야한다.

https://cloud.google.com/vision/docs/quickstart#make_a_request_to_the_cloud_vision_api_service


안드로이드용 앱이 있어서 실행해 보았다.

아래 주소에서 샘플 소스를 받으면 된다.

https://github.com/GoogleCloudPlatform/cloud-vision/blob/master/android/README.md



그대로 컴파일해서 실행하니 아래와 같이 결과가 잘 나왔다

파이썬 용도 있는데 라즈베리파이에 카메라를 연결하고 라즈베리파이에서 실행해 보았다.


http://bbangpan.tistory.com/76
face.py는 사람 얼굴을 업로드하면 어떤 표정인지 알려준다

label.py는 물체 사진을 업로드하면 어떤 물체인지 알려준다


기본적인 건 잘 되는 것을 확인할 수 있으나 좀 더 세밀한 분석을 위해 

앞으로 API를 분석해보고자 한다.

Posted by 공놀이나하여보세
,

1. 군집화 : 유사한 아이템을 같은 군집에 넣고 유사하지 않은 아이템을 다른 군집에 넣음

- 문제 : 텍스트를 유사도를 계산할 수 있는 대체물로 변형해야 한다는 점

- scikit-learn : 군집화를 지원하는 라이브러리


2. 게시물의 관련도 측정

(1)  하지 말아야 하는 방법 : levenshitein distance

(2) 어떻게 해야 하는가 

- 단어 주머니(bag-of-words) : 게시물의 모든 단어에 대해, 각 단어의 출현을 세어 벡터(vector)로 나타낸다.


scikit-learn라이브러리를 사용하여 군집화 예제 설명


3. K-means clustering 방법

   >>> num_clusters = 50
   >>> from sklearn.cluster import KMeans
   >>> km = KMeans(n_clusters=num_clusters, init='random', n_init=1,
   verbose=1)
   >>> km.fit(vectorized)


Posted by 공놀이나하여보세
,

2장은 분류법에 대한 소개 정도를 하는 챕터이다.


(1) 홀드 아웃 : 하나는 모델을 훈련시키고 다른 하나는 테스트에 사용

(2) 교차 검증(cross-validation) : 

- 단일 잔류 : 극단적인 교차 검증의 형태로 하나의 예를 제외한 모든 데이터로 모델을 학습하고, 이 모델이 남은 하나의 예를 잘 분류하는지 보는 것. 100배 더 가중된 일을 해야함

- x중첩(x - fold) 교차 검증 : x는 작은 숫자로 예를 들면 5 정도이다. 5개의 중첩 교차 검증을 수행하고자 전체 데이터를 다섯 그룹으로 나눈다. 즉 전체 데이터의 20% 정도를 남겨둔다.

(3) 최근접 이웃 분류

- 먼저 데이터 셋을 나누어 두고 새로운 데이터가 들어오면 이 데이터와 가장 가까운 데이터셋 몇개를 찾아 대충 어느 범주에 들어 있는지 찾는다..

- k최근접 이웃 분류 : 가장 가까운 하나의 점이 아닌 k개 만큼 가까운 점들을 고려함. 일반적으로 k는 작지만 데이터셋이 매우 크다면 큰 숫자로 할 수도 있다.



Posted by 공놀이나하여보세
,

드디어 마지막 장

1. 베이지안 분류기

(1) 감독형 기법이므로 학습되어야 함

(2) 분류기는 보아온 모든 특성과 특성이 특정 분류에 연계될 숫자 확률을 추적하여 학습된다.

(3) 특정 분류에 관한 문서가 주어진 단어를 가질 확률을 생성한다.

(4) 장단점

A. 장점 

- 큰 데이터 세트를 학습하고 질의하는 속도가 매우 빠르다. 증분 학습이 필요한 경우에 특히 장점이 있다. 

- 실제로 학습한 것에 대한 해석이 다소 단순하다. 각 특성의 확률이 저장되었기 때문에 언제나 데이터베이스를 살펴볼 수 있다.

B. 단점

- 특성의 조합에 기반을 두어 변화하는 출력을 다룰 수 없다.


2. 의사결정 분류기

(1) 학습하기 : 가능한 되적의 방법으로 각 단계에서 데이터를 분리할 속성들을 선택하면서 트리를 만든다.

(2) 장단점

A. 장점

- 학습 모델을 해석하기 쉽다.

- 중요한 요인들을 트리의 상단에 올려놓는다.

- 변수의 상호 작용을 쉽게 다룰 수 있다.

B. 단점

- 회귀트리는 최저 변위를 가지는 평균값으로 데이터를 분할하지만 만일 데이터가 복잡하다면 트리는 정확한 의사결정을 하기 위해 아주 거대해져야 한다.

- 증분 학습을 지원하지 않는다.


3. 신경망

(1) 신경망은 분류와 숫자 예측 문제에 모두 적용할 수 있다.

(2) 분류기

- 가장 높은 숫자를 가진 링크를 사용자가 클릭할 만한 것으로 예측해 모든 링크마다 숫자를 제공

(3) 다층 퍼셉트론망

(4) 장단점

A. 장점

- 복잡한 비선형 함수도 처리할 수 있고 입력들 간의 의존관계도 밝힐 수 있다.

- 증분학습도 가능하며 필요한 공간도 적다.

B. 단점

- 수백 노드와 수천 시냅스를 가질 수 있어 네트워크가 제공한 해답을 어떻게 만들었는지 판단하기 불가능하다.

- 특정 문제에 대한 학습 속도와 네트워크 크기를 선택할 결정적인 규칙이 없다.


4. 지지벡터머신

(1) 대부분의 데이터를 깨끗이 분리하는 선을 찾는다.

(2) 커널 트릭

- 데이터를 다른 축으로 변환하여 선형으로 구분이 되지 않는 걸 선형으로 구분할 수 있게 도와 준다.

(3) LIBSIM 사용하기

(4) 장단점

- 가용할 데이터가 많은 문제에 좀 더 잘 적용된다. 블랙박스 기법이다. 고차원 공간으로 변환하기 때문에 분류하는 방법을 이해하기 어렵다.

A. 장점

- 아주 강력한 분류기. 더 정확하고 더 잘 동작함

B. 단점

- 최적 커널 함수와 이 함수의 인자들이 모든 데이터 세트마다 약간씩 달라 매번 이들을 찾아야 한다.


워낙에 요약된 내용들이라 블로그에 정리할 필요가 없는 것 같아 이만 줄인다.


- django : lastframework 

- tasty pi


Posted by 공놀이나하여보세
,

1. Genetic Programming

가장 좋은 걸 찾은 후 진화할 때는 단순히 복사와 변경이 있다.

두가지 방법의 진화가 있다.

간단한 방법은 mutation(돌연변이) - 랜덤하게 조금만 변경

crossover - 일부를 가장 좋은 프로그램과 교체함


2. 유전자 프로그래밍과 유전자 알고리즘의 차이

(1) 유전자 알고리즘은 정해진 알고리즘의 파라미터만 찾음

(2) 유전자 프로그래밍은 알고리즘과 파라미터 둘 다를 찾음


예)

1. 테스트할 함수를 만들고 그에 대한 입력과 아웃풋 값을 테스트셋으로 200개 정도 저장한다.

2. 유전자 알고리즘을 이용하여 입력과 아웃풋이 정확히 일치하는 함수를 찾아내야 한다.

3. 임의로 함수를 몇개 만든 후 같은 입력을 주고 아웃풋을 테스트셋의 아웃풋과 비교하여 성능을 측정한다.

4. 유전자 알고리즘을 통해 돌연변이, 교배등을 통해 함수들을 만들고 아웃풋과의 비교값이 가장 작은 것을 찾는다.

5. 차이가 0이 되면 제대로 된 함수를 찾은 것이다.

6. 함수안에 쓸데 없는 공식도 들어갈 수 있으니 제거하는게 필요하다. 예) 0 + 0

Posted by 공놀이나하여보세
,