강화학습 교육 들은걸 정리하고자 한다,,
정리안하면 까먹으니까 ^^,,
기억나는데 까지 해보쟈...ㅁ7ㅁ8
1. 기계학습의 분류
지도학습 | label 된 Data를 이용하여 학습 input data에 결과값이 있음. 정답을 신경망에 학습시킴 |
비지도학습 | label이 없는 data를 이용하여 학습 |
강화학습 | 보상을 최대화 하는 Decision Making 학습 학습해서 나온 값을 가지고 모델링 보상을 학습 시키기 위해 지도학습을 한다 -> 최종 보상값을 학습한다. 인공지능이 서택을 함 정답이 없는 상태 score만 보고 학습을 시킴 |
2. 지도학습
- 정답을 신경망에 학습 시킴
- Gradient Descent
- 신경망을 만들고 LOSS를 정의한후, 사용하면 신경망이 수정됨 -> LOSS값이 낮아짐
- 신경망 F ( input -> output)
- LOSS : 신경망의 성능지표
optimizer = torch.optim.Adam(F.parameters())
optimizer.zero_grad()
LOSS.backward() //미분 : 기울기를 구한다
optimizer.step() // 적당히 작은 값을 곱해서 minimum cost에 가까워지게 한다 Back propagation
반복 적용하여 LOSS값을 낮춘다.
- 지도학습이 유용한 이유? 학습시키지 않은 값들도 output을 구할 수 있다. ( 추론 가능 )
-
3. 강화학습
score를 최대화 하는 output을 선택
에이전트가 현재의 상태를 인식하여 선택 가능한 행동들 중 보상을 최대화 하는 행동을 선택
- Challenge 1 : 학습을 위해 탐험 필요
- Exploration (탐험) vs Exploitation (활용) 의 균형이 필요
- Challenge 2 : 장기적 보상 추구
3.1 가치기반 강화 학습 ( Value Based )
- 모든 state에 대해서 기대 할 수 있는 최종 보상값을 계산하고, 그 값을 이용하여 action을 선택
- 탐험을 제외 하고, 각 state 마다 action 결정되어 있음
1) Monte-Carlo Method
- Episode를 한번 완전히 진행해야 한번 학습하는 것이다.
- History에서 배운다.
- 보상을 학습시키기 위해 지도학습을 한다 -> 최종 보상 값을 학습한다.
- 좋은 학습을 위해 가끔 활용( Exploitation) 대신 탐험(Exploration)이 필요
- Episode 진행 중간에 잘못된 action하나가 그전 action을 모두 나쁜 것으로 만듦
2) SARSA Method
- 한번의 state - action step 단위로 학습함
- Boot-strapping을 통한 지도학습
- 한 에피소드당 N개의 loss 확보
- F(s1)[a1] : state1 에서 action1을 했을 때 받을 수 있는 총 reward의 값
- F(s1)[a1] = reward1+ F(s2)[a2]가 되도록 학습을 시키기 위해서 둘의 차이 = loss
- 중간에 엉터리 답을 내지 않는 논리적인 network를 만들 수 있게 해준다.
3) Q-Larning Method & More
- Sate-Action-Reward-State
- DQN 알고리즘 (유명함) :Replay Memory ? 경험들을 따로 메모리에 저장해두고 경험들을 random하게 뽑아서 연관성 없이 학습하는 것이 더 제대로 된 학습을 할 수 있다.
3.2 정책 기반 강화 학습 ( Policy Based )
- 언제나 확률적으로 action을 선택
- 신경망의 output을 각 action에 대한 확률로 정의
1) Gradient Ascent
- Gradient Descent의 반대
- LOSS대신 -SCORE , SCORE를 높이도록 학습
- SCORE : 강화학습을 위한 신경망의 성능 지표
Agent가 정책에 따라 에피소드를 진행 했을 때 얻을 최종 보상의 기댓값
optimizer = torch.optim.Adam(F.parameters())
optimizer.zero_grad()
(-SCORE).backward()
optimizer.step()
2) Vanilla Policy Gradient
- 최종 보상 기대 값을 SCORE로 사용할 수 없는 이유 ? tree가 너무 큼,
환경이 일반적으로 확률성을 포함하고 있어서, 같은 state에서 같은 action을 했더라도 이후 state가 일정하지 않음
- 너무 많으니깐 sampling 된걸 쓰고싶어~ 그런데 , SCORE대신 J simpe을 쓰면 고르게 sampling 되지 않고
확률이 높은 tragectory가 더 많이 sample됨
-> J sampling = logP(trag.) * R(traj.)을 사용하면 sampling을 사용하면서도 기존과 똑같이 Gradient Ascent 적용가능
3) Policy Gradient with Baseline
-평균이 60점 나온 시험에서 50점 받는것과, 평균이 30점 나온 시험에서 50점받는 것중 평균 30점인게 더좋은것이기 때문에 +쪽으로 더많이 가도록 학습해야한다. 아니면 - 쪽으로 ( cartpole..)
- Baseline이 그 기준점 역할인데 처음부터 너무 높으면 모델이 할 수 잇는 최대치보다 높으면 baseline의 설정 의미가 없어지기 때문에 평균값을 하면 의미 있는 값이다.
정책기반에서는 모델이 항상 확률적으로 action을 선택하는 그 선택한 결과의 점수가 reward이고,
그 평균으로 baseline을 잡아주면 현재수준에서 잘하는지 못하는지 알기 쉽기 때문에 학습을 더 효율적으로 할 수 있게 해준다.
'DEVELOP' 카테고리의 다른 글
[Security] 사용자 인증방식 종류와 결정 (0) | 2020.05.26 |
---|---|
리눅스 alias 등록 방법 (0) | 2020.05.18 |
Feign 사용법 ( Neflix의 Rest Client 라이브러리) API GET/POST 하기~ (0) | 2020.03.12 |
OSI 7 계층 이해하기!! (0) | 2020.01.21 |
OAuth 2.0이란? (0) | 2020.01.06 |