분류 전체보기 276

MountainCar - Policy Gradient Methods, 그리고 회귀

다양한 알고리즘의 고민이전 글에서 이것 저것 수행해보고 난 뒤, 좀 더 다양한 기법들에 대해 트레이드오프를 이해할 필요성을 느낀 나는 다양한 알고리즘을 공부했다. 하지만 이번 MountainCar 환경에서는, 결국 DQN으로 다시 회귀할 수밖에 없었다.그 근거는 다음과 같다.나는 최근 다양한 정책 경사 알고리즘들을 공부해왔는데, 각 알고리즘은 해결하고자 하는 문제가 현재 MountainCar 의 상황과 맞지 않았다.하이퍼파라미터 튜닝은 예술의 영역이고, 숙련자들 또한 기존에 푼 문제와 논문에 존재하는 하이퍼파라미터를 참고하여 하이퍼파라미터를 설정한다는 것을 확인했다. REINFORCEREINFORCE는 가장 기초적인 Policy Gradient Method로, 다음과 같은 이점과 한계를 갖고 있다.이점정..

강화학습의 신경망 선택 방법

모든 DRL 환경은 순차적 데이터를 생성하는 것으로 해석될 수 있다.RNN이 이러한 유형의 입력을 다루는 데 특화되어 있다고 알고있는데, 그렇다면 DRL은 왜 항상 RNN이나 CNN-RNN구조를 사용하지 않을까? 이에 대한 제대로된 이해를 위해선 우선 MDP와 POMDP의 차이에 대해 이해할 필요가 있다. 환경의 두 가지 특성얼마나 관측 가능한가상태 공간의 특성이 무엇인가MDP와 POMDPMDPMDP는 의사결정을 모델링하는 수학적 프레임워크다. MDP의 핵심은 상태 s_t가 다음 상태 s_t+1로 전이하는 방법을 모델링하는 전이 함수이다.MDP 전이 함수는 다음 식으로 표현될 수 있다.전이 함수는 마르코프 특성을 갖는다.즉, s_t+1로의 전이는 전적으로 현재 상태와 행동 (s_t, a_t)에 의해 결정..

AI Repository/DRL 2025.09.27

DRL에서의 디버깅 방법, 하이퍼파라미터 설정

사실 DRL은 디버깅 과정이 과학이라기보다는 예술에 더 가깝다.디버깅을 잘하려면 딥 러닝 소프트웨어의 특이한 점들과 수치 계산, 그리고 하드웨어에 대해 직접 무언가를 해보면서 경험을 많이 해볼 필요가 있다.난이도가 높은 프로젝트에서는 언제나 그렇듯이, DRL을 작동시키려면 엄청난 끈기가 필요하다. 디버깅의 주요 목적은 실패의 근본적인 원인 탐색이다.디버깅 과정은 본질적으로 문제 해결의 과정이며 오류가 의심되는 다양한 부분을 체계적으로 확인하면서 오류를 찾아내는 과정이다.여기서 중요한 것은 체계적으로 한다는 것이다. 오류라고 추측되는 의심스러운 부분들을 오류 가능성이 높은 순으로 나열해 놓고, 가능하면 독립적으로 하나씩 테스트해야 한다.테스트가 실패할 때마다 오류 의심 항목을 하나씩 지우면서 다음 항목을 ..

AI Repository/DRL 2025.09.27

2025년 9월 4주차 회고

지금 할 수 있으면 해라.지금 할 수 없으면 하지마라.지금 해야하면 해라.이번주에 한 것항암치료 보조릿코드 Hard 1일 1문제 - 스트릭 기록하기카페 알바심층강화학습 인 액션이력서 만들고 카카오 넣어보기 이번주에 하지 못한 것핀잇 프로젝트 분석기본 UI 컴포넌트 구성기능 요구사항(유스케이스) 도출요구사항에 따른 UI 컴포넌트 완성요구사항에 따른 백엔드 도메인 모델 설계요구사항에 따른 계약 완성(가능하면) UI 컴포넌트/도메인 모델 코드 작성파드셉 분석무료 UI 컴포넌트 알아보기 - 핀잇 프로젝트에 적용다음주에 할 수 있는 것핀잇 프로젝트 분석기본 UI 컴포넌트 구성기능 요구사항(유스케이스) 도출요구사항에 따른 UI 컴포넌트 완성요구사항에 따른 백엔드 도메인 모델 설계요구사항에 따른 계약 완성(가능하면..

[정보 이론] Estimator - MLE, MAP, 수학적 추정

딥러닝을 공부하며 자연스레 최대 우도 추정(MLE)에 대해서 듣지만, 대부분 "최대 우도"까지만 엄밀한 정의를 설명하고 "추정"에 관해서는 다소 직관적인 방식으로 설명을 한다. 사실 Estimate, 특히 static estimation problem은 다음과 같이 "측정 벡터의 집합 z"를 함수로 하는 상수벡터 x의 추정기(estimator)를 설계하는 문제로 표현된다.이는 미지의 상수벡터 x를 어떤 성격으로 규정하느냐에 따라 다음과 같은 분류로 나뉜다.빈도주의(frequentist, non-bayesian) 접근 방법MLE베이지안(bayesian) 접근MAP둘은 상호 배타적이지 않으면, 둘을 모두 사용한 방법 또한 있지만, 둘의 개념을 명확히 잡기 위해서 보통 MLE와 MAP 개념을 자주 설명한다. ..

[정보 이론] KL Divergence (KL 발산) - 크로스 엔트로피를 쓰는 이유

어떤 데이터의 확률밀도함수 p(x)가 있다고 하자.이 함수를 정확히 알 수 없어서 이 함수를 근사적으로 추정한 확률밀도함수 q(x)를 사용한다고 가정하자.그러면 실제 분포인 p(x)로 얻을 수 있는 정보량과 근사적 분포인 q(x)로 얻을 수 있는 정보량은 다를 것이다.이때 둘 사이의 평균 정보량이 얼마나 차이가 나는지 계산한 것을 상대 엔트로피(relative entropy) 또는 KL 발산(Kullback-Leibler divergence)이라고 하며, 다음과 같이 정의한다.여기서 p(x)||q(x)는 p(x)를 기준으로 q(x)를 비교한다는 뜻이다.첫 번째 항은 근사 분포인 q(x)의 정보량을 실제 분포를 사용해 기댓값을 계산한 것(크로스 엔트로피)이다.두번째 항은 실제 분포 p(x)의 평균 정보량(..

[정보 이론] 정보량, 엔트로피와 Cross Entropy의 정의

딥러닝을 학습하며 "크로스 엔트로피 오차"를 아무렇지 않게 사용하고 있었다.그런데 최근 논문을 탐색하면서, "크로스 엔트로피"라는 용어의 정의를 생각보다 엄밀하게 규정해두지 않아 개념들이 잘 이해가 가지 않았다.따라서 다음과 같이 엔트로피의 엄밀한 정의에 대해 서술한다. 항상 일어나는 사건은 새로울 것이 없으므로 여기에서 얻을 수 있는 정보의 양은 매우 적다고 봐도 된다.또한 잘 일어날 것 같지 않는 사건에서는 빈번하게 일어나는 사건에서보다 얻을 수 있는 정보의 양이 더 많다고 봐도 될 것이다. 따라서 정보량은 사건의 발생 빈도의 영향을 받으므로, 확률적인 속성을 가지고 있고, 확률함수로 나타내는 것이 자연스러워진다. 이를 반영해 랜덤벡터 x의 정보량 h(x)를 다음과 같이 정의한다.여기서 p(x)는 x..

[강화학습] A2C

지난 글에선 REINFORCE 알고리즘을 공부했다.이 알고리즘은 간단한 CartPole 예제에는 잘 작동했지만, 좀 더 복잡한 환경의 강화학습에는 그리 잘 통과하지 않는다. 한편, DQN의 경우 이산적인 동작 공간에서 상당히 효과적이지만, 입실론-그리디 정책같은 개별적인 정책 함수가 필요하다는 단점이 있다. 이번 글에서는 REINFORCE의 장점과 DQN의 장점을 합친 actor-critic(행위자-비평자)라는 알고리즘을 소개한다.이 모델은 여러 문제 영역에서 최고 수준의 성과를 낸 바 있다.REINFORCE 알고리즘은 일반적으로 일회적 알고리즘(에피소딕, episodic algorithm)으로 구현된다.이는 에이전트가 하나의 에피소드 전체를 끝낸 후에야 그 에피소드에서 수집한 보상들로 모델의 매개변수들..

2025년 9월 3주차 회고

지금 할 수 있으면 해라.지금 할 수 없으면 하지마라.지금 해야하면 해라.이번주에 한 것항암치료 보조릿코드 Hard 1일 1문제 - 스트릭 기록하기리액트 기본 구조 & API 학습결국 API류는 직접 쓰고 트레이드오프를 고민해봐야 능숙해진다.리액트 튜토리얼카페 알바 이번주에 하지 못한 것코틀린 코루틴 학습쿠팡커피 원두 종류 및 맛 분석(블렌딩 or 싱글오리진)USACO Gold - DP 번역 및 문제풀이큰 의미가 없는 듯.핀잇 기능 요구사항 도출 & 백엔드 설계파드셉 분석다음주에 할 수 있는 것핀잇 프로젝트 분석기본 UI 컴포넌트 구성기능 요구사항(유스케이스) 도출요구사항에 따른 UI 컴포넌트 완성요구사항에 따른 백엔드 도메인 모델 설계요구사항에 따른 계약 완성(가능하면) UI 컴포넌트/도메인 모델 코드..

useReducer

useReducer 훅은 컴포넌트 내부에 새로운 State를 생성하는 조금 특별한 리액트 훅이다.상태 변화 함수 대신 “상태 변화 요청 함수” 를 사용한다.useState와 달리 “상태 관리 코드”(이벤트 핸들러로 쓰거나 했던 setState 함수를 사용하는 함수들)를 컴포넌트 외부로 분리할 수 있다.모든 useState는 useReducer 로 대체 가능하다.컴포넌트는 렌더링하기 위한 함수인데, 컴포넌트가 내부적으로 "도메인 로직"을 갖게 되면 책임 분리가 잘 안되게 된다.즉, State를 관리하는 코드가 컴포넌트 안에 길어지는 상황을 막기 위해 사용한다.즉, useReducer는 다음과 같은 경우에 사용한다.컴포넌트 내부에 보관해야 하는 상태가 도메인 로직과 밀접한 상태일 때컴포넌트 내부에 보관해야 ..