2025/08 30

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

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

[강화학습] 벨만 방정식

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

[PoEAA] 성능 관련 용어

아키텍처의 결정에는 성능과 관련된 것이 많다.일반적으로 성능의 경우, 먼저 시스템을 실행 가능한 상태로 만들고, 성능을 측정한 후, 측정 데이터를 바탕으로 체계적인 절차를 이용한다.그런데 일부 아키텍처 결정은 나중에 최적화를 통해 해결하기 어려운 성능상의 영향을 미치는 경우가 있다.그렇다고 성능 상의 결정 방식을 글로 표현하기는 매우 어려운데, 모든 상황과 환경에 따라 그 결정의 옳고 그름이 완전히 달라질 수 있기 때문이다.하지만 적어도 용어를 정리해두면, 성능과 관련된 논의를 시작할 수는 있다.따라서 아래 용어들의 정의를 살펴보며, 각각이 어떤 의미를 갖는지 알아보자.응답 시간(response time)응답성(responsiveness)대기 시간(latency)처리량(throughput)성능(perfo..

[PoEAA] 백엔드 개발자의 역할 - 소프트웨어 아키텍처와 엔터프라이즈 애플리케이션의 의미

결국 백엔드 개발자는 소프트웨어 아키텍처를 이해하고, 도메인 로직을 코드로 설계해야 한다.여기에 있어 소프트웨어 아키텍처의 의미와 엔터프라이즈 애플리케이션의 정의는 백엔드 개발자가 해야하는 일을 명확히 정의하는 아주 중요한 주제라고 할 수 있다.따라서 이에 대한 정의를 먼저 해두자.아키텍처아키텍처는 아주 많은 사람들이 정의하려고 하지만 의견이 분분한 용어다.하지만 그 안에서 몇 가지 공통적인 정의가 있다.시스템을 구성 요소로 나누는 최상위 수준의 분해이다.번복하기 어려운 결정이다.아키텍처는 한 가지 방법으로는 설명할 수 없다.하나의 시스템 안에도 여러 아키텍처가 있을 뿐 아니라, 아키텍처적으로 무엇이 중요한지에 대한 관점도 시스템의 수명 기간 중 달라질 수 있다.랄프 존슨의 견해에서도 아키텍처에 대한 흥..

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

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

[강화학습] 밴디트 문제

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

시간 관리를 위한 10가지 기법

시간 관리는 한정된 자원을 효율적으로 사용하여 목표와 생산성을 높이는 핵심 기술구조적 기법 : Franklin의 하루 분할, 3/3/3 방법, Eisenhower 매트릭스, Pomodoro 기법, 시간 블로킹, Ivy Lee생산성 프레임워크 : GTD, 2분 규칙, Seinfeld 전략, Eat the Frog, 작업 쪼개기멀티태스킹의 해로움을 강조하며, 깊은 집중과 단일 작업의 가치를 Cal Newport의 ‘Deep Work’ 등 연구 결과와 함께 제시전체적으로 시간 관리의 본질은 더 많은 일을 하는 것이 아니라, 집중과 우선순위를 통해 의미 있는 성과를 만들어내는 것서론Lord Chesterfield와 Benjamin Franklin은 각각 “시간을 세심히 관리하라”와 “시간은 돈이다”라는 명언으로..

개인적 공간 2025.08.27

[리팩터링] 테스트 구축하기

리팩터링을 제대로 하려면 견고한 테스트 스위트(test suite)가 뒷받침되어야 한다. 자동 리팩터링 도구를 활영하더라도 이 책에서 소개하는 리팩터링 중 다수는 테스트 스위트로 재차 검증해야 할 것이다.자가 테스트 코드의 가치프로그래머가 어떻게 일하는지 가만히 살펴보면, 실제 코드를 작성하는 시간의 비중은 그리 크지 않다.실제로는 아래와 같은 과정에 훨씬 많은 시간을 쏟는다.현재 상황 파악설계에 대한 고민디버깅이 "디버깅" 시간을 줄이는데, 자가 테스트 코드는 매우 중요하고 훌륭한 도구이다.모든 테스트를 완전히 자동화하고 그 결과까지 스스로 검사하게 만들자.참고) 엄밀하게 말하자면, 테스트 코드는 코드가 잘 동작하는지 확인할 수 있는 모든 종류의 코드이고,자가 테스트 코드는 코드가 스스로 테스트가 성공..

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))먼저 첫 네 줄로 ..