7. DQN

2022. 5. 17. 18:00·AI/강화학습

우리는 강화학습을 신경망을 통해 하는 방법에 대하여 학습했다. 신경망으로 옮긴 이유가 엄청나게 큰 스케일에서는 일반적인 테이블로는 학습하기 힘들기 때문에 강화학습을 신경망으로 하게 된것이다. 

하지만 이러한 강화학습 신경망은 준수한 성능을 내지 못하는 단점을 나타내었다. 

심지어 아래와 같은 간단한 문제를 이용해도 좋은 성능이 나오지 않았다. 

이러한 이유는 강화학습 신경망은 수렴을 하지 않고 발산하는 문제를 나타내기 때문이다.

어떤 문제인지 자세히 알아보자 

문제로는 2가지인데

1. Correlations between samples (샘플 간의 상관관계)

2. Non-stationary targets (비정상 표적, 흔들리는 타겟 부정확하다는 것이다.)

이 2가지이다. 

 

우리가 알고 있는 알고리즘으로는 

1. Q 네트워크를 초기화한후

2. S 상태 값을 받아온 후 

3. Q 네트워크를 통해 어떤 행동을 취할지 정한다.

4. 그후에 S 와 R 보상을 받아오며 계속 반복한다.

예를 들어 막대기 세우기 게임을 한다고 가정했을 때 

루프를 5번 돌면서 각각의 환경은 비슷한 환경이 돌아오게 될것이다. 따라서 받아오는 데이터가 아주 유사하고 샘플들이 아주 연관성이 많다는 것이 1. Correlations between samples (샘플 간의 상관관계) 문제이다. 

이 문제는 일반적인 선형회기에서 가장 좋은 예측 선을 얻기 위해서는 많은 데이터로 대략적인 선을 얻어야한다.

하지만 비슷한 데이터로 만든 직선은 대표적인 성능을 나타낼수 없게 되는것이다. (동그라미 친 부분의 데이터만 이용할 경우와 비슷하다) 

 

그럼 이러한 문제를 어떻게 해결할까?

그건 좀있다

 

그럼 2번째 문제는 무엇일까?

2. Non-stationary targets (비정상 표적, 흔들리는 타겟 부정확하다는 것이다.) 인데 이 의미는 우리가 구하고 싶은 것은 Y Label 값이다. 따라서 우리는 loss 함수를 이용해 예측값과 타겟 갑을 비슷하게 만드는 것이 목표인 것이다. 

우리는 예측값과 목표값(타겟값)을 구할때 같은 세타(가중치)를 이용해 네트워크를 사용한다. 따라서 업데이트할 때마다 목표 값도 같이 변하는 것이다. 따라서 Y햇과 Y값이 둘다 변하는 문제를 겪게 된다. 따라서 타겟이 일정하지 않고 욺직이는 문제를 가지게 된다. 

 

따라서 이러한 문제를 해결한게 딥마인드다 또 구글! ㄷㄷ

1. go deep 깊게 간다.

2. capture and replay (이건 아직 잘 모르겠다)

3. separate networks 네트워크를 공유한다.

첫 번째로 깊이 간다. 이다 지난번에 사용한 것은 한층이다. 따라서 성능이 안좋았던 것이다. 

 

2번째는 굉장히 중요한 솔루션이다.

너무 가까운 데이터로만

학습을 하면 곤란하다는 것이다. 이 해결법은 experience replay 라는 방법이다. 우리는 액션을 취하는 루프를 돌면서 상태를 돌려줄 것이다. 이때! 학습을 하지 않고 받아온 상태 s를 버퍼에 저장한다. 그래서 그 상태가 버퍼에 수만장 저장된다. 그후 랜덤하게 몇개를 가져와서 학습을 한다. 그럼 이게 뭐야 이럴수 있다. 

 

그것에 대한 설명의 알고리즘이 위에 2줄로 표현 할 수 있다. 액션을 취하고 학습하지 않고 D라는 버퍼에 저장한다.

(상태 액션 보상 그다음 액션) 이걸 저장하고 랜덤하게 가져와서 미니배치로 만들고 학습한다. 

이렇게 학습을 하게 된다면 랜덤하게 몇개를 가져온후 학습을 하게 된다. 따라서 전체 동향을 파악하기 좋다는 것이다. 가까운 것들을 하는게 아니라 랜덤한 분포로 하게 되면서 좋은 성능을 나타내게 되는 것이다. 

마지막 3번째 문제 타겟이 움직인다이다. Y 햇 예측값 Y 타겟값이다. 이때 세타를 같이 업데이트하기 때문에 타겟이 움직이는 것이다. 따라서 이 문제를 해결하기 위해서는 하나의 네트워크를 더 만드는 것이다. 

따라서 새로운 알고리즘을 보게 된다면  바세타라는 가중치를 가져오는 것이다. 

따라서 세타의 네트워크와 타겟 네트워크를 따로 두는 것이다.

처음에는 가만히 있다가 나중에 시간이 좀 지나면 네트워크를 카피해온다. 

따라서 나중에 위에 예측값을 이용해 구하는 것을 카피 해오는 것이다. 하나의 네트워크람 업데이트하고 모든 시스템에 가설값을 타겟값에 복사를 해오는 것이다. 

 

따라서 우리는 네이처에 실린 논문을 이해할 수 있는 것이다. 

우선 replay memory라는 D를 만든다. 그러고 난후 바세타라는 네트워크를 만들고 우리가 알고 있는 방법으로 쭉쭉 진행하면 된다. 

반응형

'AI > 강화학습' 카테고리의 다른 글

6. Q-Network  (0) 2022.05.16
2. Playing OpenAI GYM Games  (0) 2022.05.16
5. Q-learning in non-deterministic world  (0) 2022.05.16
4. Q-learning exploit&exploration and discounted reward  (0) 2022.05.16
3. Dummy Q-learning  (0) 2022.05.15
'AI/강화학습' 카테고리의 다른 글
  • 6. Q-Network
  • 2. Playing OpenAI GYM Games
  • 5. Q-learning in non-deterministic world
  • 4. Q-learning exploit&exploration and discounted reward
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    코딩기초스킬
    소수찾기
    큐
    코딩기초
    DFS
    코딩문제
    BFS
    n진법 변환
    프로그래머스
    코딩테스트
    왜곡보정
    c언어
    if문
    알고리즘
    에라토슽네스의 체
    삽입 정렬
    이미지처리
    순차 탐색
    인접리스트
    인접행렬
    C언어 기초
    그리디
    백준
    정렬
    코딩
    스택
    다이나믹 프로그래밍
    캘리브레이션
    선택정렬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
7. DQN
상단으로

티스토리툴바