아래 글은 주로 여기여기에서 가져왔음을 밝힘니다.


Normalization

Normalization은 모든 실수 데이터들 [0,1] range로 변환하는 걸 의미한다.


예를 들면 다음과 같다.



Standardization(=z-transform)

Standardization은 반면 평균을 0으로 만들고 unit variance를 같도록 표준편차로 나누는 작업을 의미한다(z-score)

(결국 평균은0이고 표준편차는 1이되도록 바뀐다)



Normalization의 단점은 outlier가 있어서 매우 크게 튀는 값이 있으면 모든 값을 [0,1]사이에 넣는 속성 때문에 다른 정상(?)값들이 작은 범위에 들어가게 된다는 점이다.

Standardization의 경우는 Normalization과 다르게 [0,1]등 특정 범위에 bound되지는 않는다.

따라서 대부분의 경우는 Normalization보다 Standardization이 좀 더 추천됨


표준편차로 나누는 대신 IQR을 사용하는 방법도 있다. 여기 참조

표준편차는 +-시그마 범위가 68.27%라서 이를 50%로 사용하고 자 할 때 사용(전체 데이터를 4등분해서 outlier여부를 체크하는 등)


또는 10등분해서 상하위 10%를 outlier로 체크하는 방법도 가능(outlier면 범위안으로 값을 바꾼다던지 = clipping = clamping또는 Winsorizing)



Log transformation

값들이 10배수 이상씩 차이가 크다면 log를 씌워서 간격을 줄일 수 있다.

하지만 log는 양수에만 씌울 수 있어서 값에 0이나 음수가 있다면 좀 더 고민이 필요하다.(아래 그래프 참조)





반응형

'AI, ML > ML' 카테고리의 다른 글

의사결정나무(Decision Tree)  (0) 2019.02.07
[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Gym  (0) 2018.11.07
크로스엔트로피 손실함수  (0) 2018.10.02
credit assignment problem  (0) 2018.09.27

강화학습을 위한 환경을 제공해주는 툴킷

https://gym.openai.com/


pip install gym 한다음에 console에서 다음 코드만 쳐도  

import gym
env = gym.make("Taxi-v2")
env.reset()
env.render()


바로 다음과 같은 결과물을 보여준다.


콘솔 환경에서도 텍스트로 렌더링 해준다는게 감동인 부분인데 모든 환경에 대해서 지원하는건 아닌거 같다.

"Taxi-v2"대신 "CartPole-v0"로 바꿔보면 X윈도우 관련 오류가 뜨더라


Jupyter Notebook에서는 gym설치 후 돌려보면 아래처럼 그래픽 관련 부분도 잘 처리가 된다.


간단하게 랜덤액션 선택을 통한 환경 변화 애니메이션을 보려면 다음과 같이 하면 된다.


반응형

'AI, ML > ML' 카테고리의 다른 글

[데이터 전처리] clipping vs trimming  (0) 2019.01.04
Standardization vs normalization  (0) 2019.01.04
크로스엔트로피 손실함수  (0) 2018.10.02
credit assignment problem  (0) 2018.09.27
exploit - explore dilemma  (0) 2018.09.27

여기, 여기 좋다.

이 자료가 좋다고 하는데 아직 안 읽어 봄


information(정보량)

사건에 대한 확률이 드물수록 정보량은 크다

$1 \over p(x)$


두 사건이 동시에 발생할 확률은 곱해준다.

${1 \over p(x)} \times {1 \over p(y)}$


로그를 씌우면 언더플로도 막고 곱셈을 덧셈으로 바꿀 수 있다.

최종정보량 information = $\log{1 \over p(x)} + \log{1 \over p(y)} = - \sum \log p(i)$


시사점

정보량은 확률의 역수이고, 계산 편의성을 위해 log를 취했다.

log를 취한 것은 계산 편의성을 위한 것도 있지만, 필요한 비트수를 계산한다는 의미 부여를 할 수도 있다($\log_2$를 쓴 경우)

예를 들어 로그를 씌우기전 정보량이 40억으로 나왔는데 여기에 $\log_2$를 씌우면 31.x가 나올것이다. 

이러면 이것의 의미를 이 정보를 전달하는데 필요한 비트수는 32비트이다. 이렇게 해석 하는 것..


entropy(정보량의 기댓값)

기대값 계산 공식 $E[X] = \sum_x xp(x)$

$E[f(X)] = \sum_x f(x)p(x)$

$E[-\log p(x)] = - \sum_x {{\log p(x)}p(x)}$

위 식에서 눈여겨 볼 부분은 p(x)가 두 번 쓰였는데.. 기대값 계산식을 들여다 보면 사건에 $-\log p(x)$가 쓰이고 확률분포에 $p(x)$가 쓰임


시사점

기대값은 일반적인 의미로 평균이라는 의미로 해석할 수 있고,

기대값을 구함으로써 개별 정보량에 비해서 평균적인 정보량(을 전송하는데 필요한 비트..로그이므로)이라는 관점으로 해석이 바뀐다.

예를 들어 위에서는 특정 정보를 전달하는데 필요한 비트수를 논했다면 여기서는 평균적으로  몇 비트가 필요하냐는 얘기로 바꿀 수 있다.


KL-divergence

두 확률간 상대적인 entropy를 뜻하며, cost function이 될 수 있다.

Q(x) 는 예측, P(x) 는 실제 확률이라고 하면, 이 값은 아래처럼 계산된다.

KL-divergence = 상대적인 엔트로피 = $E[-\log Q(x)] - E[-\log P(x)] $ 

(이때 확률 분포는 두 기대값 항 모두 P(x)를 사용)

 $=E[-\log Q(x)] - E[-\log P(x)] $


시사점

위에 식을 살펴보면 KL-divergence 식에서 확률분포는 P(x)로 고정한 상태에서 entropy의 차이를 구한다는 부분을 주목할 필요가 있다.

사실 왜 확률분포를 P(x)로 고정했느냐고 물어보면 이 건 아직 잘 모르겠다. KL-divergence의 정의와 관련된 부분이어서.. 원작자의 생각에 대한 공부가 좀 더 필요할듯


cross entropy

위의 KL-divergence로 cost function을 설계해보자

근데 이때 실제 확률인 P(x)는 상수취급하면

$E[-\log Q(x)] = -\sum \log q(x) p(x)$ 이 텀을 최소화 하는 문제로 변환된다. 

 그리고 이렇게 H(p, q)로 표현한다.


원래의 entropy 정의대로 하자면

$E[-\log Q(x)] = -\sum {{\log Q(x)}Q(x)}$ 이렇게 전개되는데.. 

예측 확률분포인 Q(x)대신 실제확률분포인 P(x)를 쓰면 

$E[-\log Q(x)] = -\sum {{\log Q(x)}P(x)}$ 이렇게 되고 entropy가 아닌 cross entropy가 되는 것


P(x)와 Q(x)가 동일하면 cross entropy = entropy가 되면서 최소값이 되고.. 서로 많이 다르면 그 값이 커지는 구조다.

KL-divergence의 정의상 내부에 cross-entropy텀이 들어감을 눈여겨 보자.


조금 헷갈릴 수 있는 부분은 p와 q 어떤걸 고정하냐 이런 부분인데..이건 그냥 넘어가자 ㅋ

(이 부분이 헷갈릴 수 있다는 것은 위키설명에도 나와있다.)


중요한건 P(x)와 Q(x) 두가지 확률분포가 있을 때, 이 둘간의 차이를 cross entropy 텀으로 구할 수 있고 이게 손실함수가 될 수 있다는 것이다.

P(x)나 Q(x)모두 더해서 1이 되어야 하는 확률분포가 되어야 쓸 수 있기 때문에..

실제 분포인 P(x)의 경우 one-hot encoding을 해서 합이 1을 맞춰주고,

예측 분포이자 네트웍의 아웃풋이 되는 Q(x)의 경우 softmax를 통해 합을 1로 맞춰준다는걸 이해하는게 중요하다.



예제

예제는 여기에 잘나와있는거 같아서 따로 안적음



log-likelihood와의 연관성

만약 확률 변수 X가 $ {\displaystyle X=(X_{1},X_{2},\cdots ,X_{n})}$의 꼴로 주어져 있으며, $X_{i}$이 확률 분포로 ${\displaystyle P_{i,\theta }(X_{i})}$를 가진다면 가능도 함수와 로그 가능도 함수는 다음과 같다.
$=-H(P, Q)$

위 식을 보자.. 가능도(=likelihood)는 결국 모든 독립시행 샘플을 곱한걸로 구할 수 있는데, 여기에 로그를 씌운 로그-가능도의 경우 corss entropy의 음수값과 같아짐을 볼 수 있다.

그래서 cross entropy를 최소화 하는 문제는 결국 log-likelihood를 최대화 하는 문제와 같아지게 된다.

반응형

'AI, ML > ML' 카테고리의 다른 글

Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07
credit assignment problem  (0) 2018.09.27
exploit - explore dilemma  (0) 2018.09.27
딥러닝 자체구현으로 XOR문제 풀어보기  (0) 2017.12.14

강화학습에서는 다음 유명한 문제가 있다.


Challenge1: credit assignment problem

which of the preceding actions was responsible for getting the reward


세 번의 action 선택 후 reward가 발생했으면 어느 액션이 더 많이 기여했을까?

또는 어느 action이 어느만큼 기여했을까?


사례1

벽돌깨기에서 reward는 벽돌히트직후 발생하는데, 막대기를 팅겨내기 위한 action은 한 참 전이다.

(벽돌히트 시점에서의 action은 시점으로는 reward와 가깝지만 credit으론 상관이 덜하다)


사례2

공부하고, 밥먹고, 누워서 잤는데 일어나 보니 엄마한테 칭찬받았다. 

누워서 잔것 때문에 칭찬받은 것일까?

교육 중심 엄마라면 공부한것 때문에, 건강 중심 엄마라면 밥먹은게 칭찬의 주 요인일 수 있다.

칭찬방식이 일관된다면, tiral and error를 통해 주 원인을 파악하고 행동할 수 있다.


Q-Learning propagates rewards back in time,

until it reaches the crucial decision point which was the actual cause for the obtained reward



반응형

'AI, ML > ML' 카테고리의 다른 글

Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07
크로스엔트로피 손실함수  (0) 2018.10.02
exploit - explore dilemma  (0) 2018.09.27
딥러닝 자체구현으로 XOR문제 풀어보기  (0) 2017.12.14

강화학습의 경우 다음의 유명한 딜레마가 있다.


Challenge2: explore-exploit dilemma

past experiences (exploitation) vs new choices (exploration)

이용 vs 탐색


사례1

익숙한 길로만 다니면 지각은 안하겠지만, 새로운 지름길을 발견할 수는 없다.

(하던대로만 하면 발전이 없다.)

그렇다고 너무 새로운 길로만 다니면, 지각하기 쉽다.

처음에는 탐색을 위해 새로운길로 다니다가, 시간이 갈수록 익숙한 길로 다닌다면?


사례2

늘 먹던 음식만 먹으면 실패할일은 없겠지만, 새로운 맛집을 발견할 수 없다.

그렇다고 매일 새로운 음식만 먹으면 취향에 안맞는 음식을 자주 먹어야 한다.

주중에는 가던 음식점, 주말에는 새로운 음식점을 가보는건 어떨까?


Q-Learning ε-greedy exploration
with probability ε choose a random action,
otherwise go with the “greedy” action with the highest Q-value.
In their system DeepMind actually decreases ε over time from 1 to 0.1



반응형

'AI, ML > ML' 카테고리의 다른 글

Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07
크로스엔트로피 손실함수  (0) 2018.10.02
credit assignment problem  (0) 2018.09.27
딥러닝 자체구현으로 XOR문제 풀어보기  (0) 2017.12.14

딥러닝 개념을 공부하면서 python으로 만들어 본 구현체


아래 코드에는 XOR를 학습시키는 코드까지 함께 들어있다.


github(https://gist.github.com/sevity/)에서도 코드를 볼 수 있다.





반응형

'AI, ML > ML' 카테고리의 다른 글

Standardization vs normalization  (0) 2019.01.04
Gym  (0) 2018.11.07
크로스엔트로피 손실함수  (0) 2018.10.02
credit assignment problem  (0) 2018.09.27
exploit - explore dilemma  (0) 2018.09.27

+ Recent posts