AI Repository 42

[강화학습] 시간차 학습(TD), SARSA, Q-Learning

시작하기 전에, 간단하게 강화학습에서의 몬테 카를로와 DP의 특징에 대해 짚고 넘어가겠다.DP다이나믹 프로그래밍의 점화식을 통한 증분 계산을 활용한다.장점따라서 에피소드 진행 중 평가와 개선을 번갈아가며 최적 정책을 얻을 수 있다.이 과정에서 반복되는 계산을 하나로 합쳐 진행하는 최적화(가치 반복법) 또한 가능하다.단점환경 모델(상태 전이 확률과 보상 함수)이 확실하게 알려져 있어야 계산이 가능하다.계산량에 대한 부하가 심하다.몬테 카를로실제 시나리오를 돌려보면서 환경을 추론한다. (비정상 Multi-Armed Bandit 문제)장점환경 모델이 확실하지 않더라도 평가/개선이 가능하다.단점몬테 카를로의 특성 상, 하나의 에피소드가 끝나야 평가 후 개선이 가능하다.일회성 과제에서만 사용이 가능하고, 지속적 ..

[강화학습] 강화학습에서 최적 정책을 찾는 방법

최적 정책은 '평가'와 '개선'을 번갈아 반복하여 얻는다.'평가' 단계에서는 정책을 평가하여 가치 함수를 얻는다.그리고 '개선' 단계에서는 가치 함수를 탐욕화하여 정책을 개선한다.이 두 과정을 번갈아 반복함으로써 최적 정책(과 최적 가치 함수)에 점점 다가갈 수 있다. 신경망에 비유하자면, 강화학습의 '평가'는 손실 함수 역할이고, 강화학습의 '개선'은 경사 하강법이 수행하는 역할이다. 예를 들어 몬테 카를로 방법으로 강화학습을 수행한다고 해보자.pi라는 정책이 있다면, 몬테 카를로 법을 이용해 V_pi를 얻을 수 있다.그다음은 개선 단계이다. 개선 단계에서는 탐욕화를 수행하며, 다음 수식으로 표현할 수 있다.계산 단계에서는 가치 함수의 값을 최대로 만드는 행동을 선택한다.이를 탐욕화라고 한다. Q 함..

[강화학습] Off-Policy, On-Policy, 중요도 샘플링

입실론-그리디 정책은 탐색과 활용을 적절히 활용하기 위한 기법이다. 하지만 그 결과는 '완벽한 최적 정책'이 아니다.왜냐하면 '탐색'의 과정을 거쳐야 하고, 그 과정이 비효율이 되기 때문이다. 여기서 '활용'만 하고 싶다는 욕심이 생길 수 있다.몬테 카를로 법을 이용해, 완벽한 최적 정책을 학습하는 방법을 알아보자.On-Policy스스로 쌓은 경험을 토대로 자신의 정책을 개선하는 방식이다.밴디트 문제에서 구현한 입실론 그리디 정책에선 '탐색' 과정이 필수로 들어가왔다.Off-Policy자신과 다른 환경에서 얻은 경험을 토대로 자신의 정책을 개선하는 방식이다.만약, 평가와 개선의 대상인 정책과, 실제 행동을 선택하는 행동 정책을 구분하면 어떻게 될까?이렇게 하면, 실제 행동을 선택하는 'Target pol..

[강화학습] 벨만 방정식

이번 내용은 지난 장에서 다루지 못했던 "확률적 MDP"의 수식 전개이다.벨만-포드 알고리즘과 다이나믹 프로그래밍을 만든 수학자 벨만의 또다른 업적, 벨만 방정식에 대해 알아보자.벨만 방정식은 MDP에서 성립하는 가장 중요한 방정식이며, 많은 강화 학습 알고리즘에 중요한 기초를 제공한다.사실 순수한 벨만 방정식의 경우, 실용적인 문제에서는 계산량이 너무 많아져서 적용하기 쉽지 않다.하지만 선형 회귀/로지스틱 회귀에서 딥러닝이 발전했듯이,벨만 방정식의 도출 과정이 강화학습의 기초(즉, 새로운 기법의 적용 가능성 탐색/연구를 위한 기초)가 되기 때문에, 정확히 인지하고 넘어가는 것이 중요하다.참고로, 좀 어렵다...기호가 이것저것 많이 등장해서 읽는데 시간이 좀 걸릴 것이다.익숙해지는 수밖에 없으니, 반복해..

[강화학습] 마르코프 결정 과정(MDP)

벤디트 문제에서는 에이전트가 어떤 행동을 취하든 다음에 도전할 문제의 설정은 바뀌지 않았다.그런데 세상의 대부분의 문제는 에이전트의 행동에 따라 상황이 시시각각 변한다. 지금부터 변화하는 상태에 따른 최선의 결정을 돕는 도구, 마르코프 결정 과정에 대해 알아보자.강화 학습은 분명 스스로 정책을 학습하는 도구이지만, 이와 같이 해석적으로 문제의 해를 증명하는 과정 또한 중요하다.결국 문제를 잘게 쪼개 해석적으로 문제를 풀고, 이를 통해 큰 문제의 논리적 완결성을 증명해야 하기 때문이다.이번 장은 아래와 같은 순서로 진행할 것이다.먼저, MDP에서 쓰이는 용어들을 수식으로 정리할 것이다.그 다음, MDP의 목표를 정의한다.마지막으로, 간단한 MDP 문제를 풀며 목표를 달성해본다.마르코프 결정 과정(MDP)이..

[강화학습] 밴디트 문제

추천 시스템과 같은 문제에서 밴디트 문제는 가장 간단한 예시로 등장한다.강화학습의 기초를 닦기 위해, 밴디트 문제에 대해 이해해보고, 그 해법을 공부해보자.머신러닝 분류와 강화학습머신러닝 기법들은 다루는 문제의 성격을 기준으로 분류할 수 있다.그리고 크게 다음 세가지로 나뉜다.지도 학습비지도 학습강화 학습지도 학습지도학습은 머신러닝에서 가장 전통적인 기법으로, 입력(문제)과 출력(정답)을 쌍으로 묶은 데이터를 통해 문제를 해결한다.지도학습의 가장 큰 특징으로는 이와 같은 명확한 '정답 레이블'의 존재를 들 수 있다.비지도 학습비지도 학습에서는 이러한 '정답 레이블'이 존재하지 않는다.비지도 학습은 데이터에 숨어있는 구조나 패턴을 찾는 용도로 쓰이며, 아래와 같은 곳에 활용된다.군집화(클러스터링)특성 추출..

Define-by-Run과 Define-and-Run

딥러닝 프레임워크는 동작 방식에 따라 크게 두 가지로 나눌 수 있다.Define-and-Run (정적 계산 그래프)Define-by-Run (동적 계산 그래프)Define-and-RunDefine-and-Run을 직역하면 '계산 그래프를 정의한 다음 데이터를 흘려보낸다'는 뜻이다.즉, 아래 순서대로 동작이 진행된다.사용자는 계산 그래프를 정의한다.프레임워크는 주어진 그래프를 컴퓨터가 처리할 수 있는 형태로 변환한다.데이터를 흘려보낸다.# 계산 그래프 정의a = Variable('a')b = Variable('b')c = a*bd = c + Constant(1)# 계산 그래프 컴파일f = compile(d)# 데이터 흘려보내기d = f(a=np.array(2), b=np.array(3))먼저 첫 네 줄로 ..

python - from A import B와 import A.B as b의 차이

과거 모듈 내 객체를 싱글톤처럼 사용하려던 기억이 있었는데, 이 둘의 차이를 구분하지 못해 고생했던 기억이 있다.이번 기회에 글로 정리해두었다.하나씩 알아보자.시작하기 전에 - 모듈, 패키지, 라이브러리모듈모듈은 파이썬 파일을 의미한다.특히 다른 파이썬 프로그램에서 import하여 사용하는 것을 가정하고 만들어진 파이썬 파일을 '모듈'이라 한다.모듈은 import 시 sys.modules 딕셔너리에 보관되게 된다.패키지패키지는 여러 모듈을 묶은 것이다.패키지를 만들려면 먼저 디렉터리를 만들고, 그 안에 모듈과 __init__.py 파일을 추가한다.라이브러리라이브러리는 여러 패키지를 묶은 것이다. 그래서 하나 이상의 디렉터리로 구성된다.때로는 패키지를 가리켜 '라이브러리'라고 부르기도 한다.import 동..

python 애스터리스크(*) - 언패킹의 역할과 예제

파이썬에는 애스터리스크가 포인터도 아닌 것이 특이한 일을 하고 있어, 이 코드를 처음 보면 당황하기 부지기수이다.파이썬의 애스터리스크 기호의 사용법에 대해 자세히 알아보자.대입 언패킹함수 호출 시 언패킹리터럴 내부 언패킹대입 언패킹 (Extended Iterable Unpacking, PEP 3132)오른쪽 이터러블을 왼쪽 변수들에 “펼쳐” 넣는다.*가 붙은 변수는 나머지 전부를 리스트로 받는다.*는 각 패턴 레벨에서 최대 1개만 허용된다.a, *rest = [10, 20, 30]*head, b = (1, 2, 3, 4)x, *mid, y = range(5) * 변수는 항상 리스트가 된다.(튜플 아님).최소 길이만 맞으면 남는 요소가 0개여도 동작한다(그 경우 빈 리스트 ([])가 됨).a, *res..

Python - zip의 역할과 예제

파이썬의 zip()은 여러 이터러블(리스트, 튜플, range 등)을 같은 인덱스끼리 묶어 튜플들의 이터레이터를 만든다.핵심 특징게으른 이터레이터결과를 한꺼번에 만들지 않고 필요할 때마다 생성함 → 메모리 절약.가장 짧은 길이 기준으로 끝남.개수 제한 없음zip(a, b, c, ...)처럼 여러 개를 동시에 묶을 수 있음.언패킹으로 ‘되돌리기’zip(*pairs)로 다시 열 단위로 분리함.길이 검사 옵션zip(a, b, strict=True)로 길이가 다르면 ValueError 발생(PEP 618, Python 3.10+).예제 모음1) 기본 사용nums = [1, 2, 3]chars = ['a', 'b', 'c']pairs = list(zip(nums, chars))2) 병렬 반복a = [10, 20,..