전체 글 242

[정보 이론] 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는 다음과 같은 경우에 사용한다.컴포넌트 내부에 보관해야 하는 상태가 도메인 로직과 밀접한 상태일 때컴포넌트 내부에 보관해야 ..

리액트 컴포넌트의 라이프사이클과 useEffect

상태 전이는 그 상태 전이의 발생을 알리는 방식의 설계로 무궁무진한 응용 가능성을 갖고 있다.그렇기 위에 꼭 알아둬야 하는 리액트 컴포넌트의 생명주기와, 이를 활용할 useEffect에 대해 알아보자.리액트의 컴포넌트의 생명주기Mount컴포넌트가 탄생하는 순간.화면에 처음으로 렌더링되는 순간.Update컴포넌트가 리렌더링 되는 순간.UnMount컴포넌트가 화면에서 사라지는 순간.컴포넌트가 렌더링에서 제외되는 순간.useEffect리액트에선 각 생명주기 별로 명령을 지정해둘 수 있다.이를 라이프사이클 제어 라고 하며, useEffect() 훅을 통해 구현할 수 있다.리액트 컴포넌트의 사이드 이펙트를 제어하는 리액트 훅.사이드 이팩트컴포넌트의 동작에 따라 파생되는 여러 효과 (생명주기 제어 등)useEffe..

State, 리렌더링, 리액트 훅과 커스텀 훅 - 리액트의 핵심 기능

리액트에서의 State모든 컴포넌트들은 State를 가질 수 있다.현재 State에 따라 렌더링 결과를 다르게 할 수 있다.State의 변화에 따라 렌더링을 다시 하는것을 Re-Rendering이라고 한다.리액트는 변수의 값의 변화로는 리렌더링 되지 않고(버퍼에 담김), State가 변화해야만 즉각적으로 리렌더링을 수행한다.“react” 에서 useState를 import 하는것으로 State를 갖게 할 수 있다.이때, “react”에는 useState만 있는것이 아니므로 다음과 같이 코드를 작성해야 한다import { useState } from "react";state의 구성요소state는 배열, useState() 함수를 통해 얻을 수 있다.state가 처음 생성됐을 땐 [ undefined, f ..

컴포넌트, jsx, 이벤트와 이벤트 객체 - 리액트의 기초 기능 사용 방법

개인 학습용 정리로, 리액트 첫 학습을 목적으로 찾아보고 계신다면 공식 문서를 강력히 권장드립니다. 자습서: React 시작하기 – ReactA JavaScript library for building user interfacesko.legacy.reactjs.org 컴포넌트란?js에서 html 코드를 반환하는 함수.컴포넌트들은 트리 구조로 관리되며, root 컴포넌트를 루트 노드로 삼는다.특정 컴포넌트의 리턴값 안에 들어있는 컴포넌트를 특정 컴포넌트의 “자식 컴포넌트” 라고 한다.리액트는 클래스 기반 컴포넌트와 함수 기반 컴포넌트가 있지만, 리액트에서는 주로 함수 기반 컴포넌트를 사용한다.함수 기반 컴포넌트는 반드시 첫글자가 “대문자”여야 한다.jsx에서 소문자로 시작하는 이름은 html 요소로 보고j..

리액트 소개

리액트의 특징 (추구하는 것)컴포넌트를 기반으로 UI를 표현한다.이는 재사용성이 높은 UI의 구현을 위해 적용되었다.화면 업데이트 구현이 쉽다.선언형 프로그래밍 방식(추상화된 기능) 으로 동작하기 때문에, 구현이 간편하다.선언형 프로그래밍 ↔ 명령형 프로그래밍(하나부터 열까지 전부 지시)으로 이해하면 좋다.화면 업데이트가 빠르게 처리된다. (SPA)리액트의 SPA는 Virtual DOM(버퍼 객체) 을 구성함으로써, JS로 인한 DOM의 수정 사항을 모아서 객체로 처리하다가, 마지막에 DOM을 한번만 수정하고, 그러므로 수정 시간을 단축시킨다.브라우저의 렌더링 과정HTML 을 DOM(Document Object Model)으로 변환하고, CSS를 CSSOM(CSS Object Model)로 변환한다.DO..

[강화학습] Policy Gradient Method

우리가 기존에 알고있던 DQN은 Q 함수를 하나의 신경망으로 근사하는 "정책 외 알고리즘"이다.즉, DQN은 행동을 했을 때 얻을 수 있는 기대 보상을 기준으로 판단하는 알고리즘이다.QN이 예측한 Q value들은 특정 정책에 따라 다음 동작을 선택하는데 쓰인다.동작을 선택하는 정책은 다양한데, 현재 우리는 입실론-그리디 정책 정도만 학습했다.그 외에도 Q value들에 소프트맥스 층을 적용해서 하나의 동작을 선택하는 등 다양한 정책이 가능하다. 그런데 신경망과 정책을 따로 두고 동작을 선택하는 대신, 신경망이 직접 동작을 선택하도록 훈련하면 어떨까?이 경우 신경망은 정책 함수(policy function)의 역할을 한다.이런 신경망을 정책 신경망, 줄여서 정책망(policy network)이라고 부른다..

2025년 9월 2주차 회고

지금 할 수 있으면 해라.지금 할 수 없으면 하지마라.지금 해야하면 해라.이번주에 한 것OpenAI Gym - MountainCar 학습 시도학습이 잘 이루어지지 않음좀 더 다른 기법들을 학습해볼 필요성을 느낌항암치료 보조카카오 공채 내용 살펴보기RabbitMQ Java/Spring AMQP 클라이언트 학습카페 알바 이번주에 하지 못한 것코틀린 코루틴 학습 할 일이 너무 많으니, 매일 우선순위 결정하는데 머리가 복잡해진다.조금 단순화할 필요성 느낌 다음주에 할 수 있는 것심층강화학습 인 액션리액트 튜토리얼핀잇 기능 요구사항 도출 & 백엔드 설계파드셉 분석다음주에 할 수 없는 것코틀린 코루틴 학습쿠팡커피 원두 종류 및 맛 분석(블렌딩 or 싱글오리진) 다음주에 해야하는 것USACO Gold - DP 번역..

[강화학습] Target Network를 이용한 안정성 개선

지금까지 우리는 Gridworld 게임을 플레이하도록 심층 강화학습 알고리즘을 훈련하는 데 성공했다.하지만 두 모드의 경우 가능한 4x4 게임판 구성이 아주 많지는 않으므로, 그냥 가능한 모든 게임판 구성을 암기했을 가능성도 있다. 따라서 게임을 이기려면 알고리즘은 게임 플레이 방법을 실제로 배워야 한다.그러나 앞에서 본 잡음이 많은 손실 그래프가 말해 주듯이, 현재 우리의 심층 강화학습 모형은 Gridworld의 무작위 모드를 그리 잘 학습하지 못한다. 그럼 가치 갱신량들을 좀 더 고르게 만드는 또다른 기법을 살펴보자.학습 불안정성DQN 논문에서 딥마인드 팀은 개별 동작마다 QN의 매개변수들을 갱신하다보면 학습이 불안정해질 수 있음을 지적했다.Girdworld 게임처럼 보상이 희소한 환경, 즉 게임..

[강화학습] Experience Replay, ER - Catastrophic Forgetting의 해소

본 내용은 심층강화학습 인 액션 도서를 참고하여 작성되었습니다. 심층 강화학습 인 액션 - 예스24프로젝트로 배우는 심층 강화학습의 이론과 실제!이 책 『심층 강화학습 인 액션』은 환경이 제공하는 직접적인 피드백에 기반해서 환경에 적응하고 자신을 개선해 나가는 에이전트의 구현 방www.yes24.com 우리는 이전 글에서 Gridworld를 학습시켰고, 무사히 학습에 성공한?것을 알 수 있었다.하지만 이것은 게임의 '정적' 모드, 즉 가장 쉬운 버전이었다.mode='random'으로 다시 실험해보면 실망스러운 결과가 나온다.실망스럽지만 흥미로운 결과이다.이 결과를 자세히 살펴보면, 단순히 정적 모드에서의 움직임을 암기했다고 보는게 정확한 수준으로 그대로 움직인다. 학습 또한 'random' 모드로 수행..

[강화학습] DQN

본 내용은 심층강화학습 인 액션 도서를 참고하여 작성되었습니다. 심층 강화학습 인 액션 - 예스24프로젝트로 배우는 심층 강화학습의 이론과 실제!이 책 『심층 강화학습 인 액션』은 환경이 제공하는 직접적인 피드백에 기반해서 환경에 적응하고 자신을 개선해 나가는 에이전트의 구현 방www.yes24.com 과거에도 Q함수를 신경망으로 표현하려던 시도는 있었지만, 이는 다음과 같은 문제가 있어 해결하지 못했다.신경망 학습 연산의 비용이 감당 불가능했다.catastrophic forgetting 문제가 있었다. - ER(Experience Replay)신경망 자체의 편향을 제거하기가 어려웠다. - Target Network시대가 변화하며 GPU의 병렬 연산의 성능이 대폭 향상되었고,구글 딥마인드에서 2013년에..

[USACO Gold] Knapsack DP - 배낭 문제를 다이나믹 프로그래밍으로 풀기

배낭(knapsack) 문제는 보통 제한된 용량의 컨테이너에 물건들의 부분집합을 넣되, 물건과 관련된 어떤 양을 세거나(카운트) 최적화하는 문제를 다룬다.거의 항상 각 물건은 양의 무게를 가지며, 우리가 선택한 물건들의 총 무게는 어떤 수로 주어지는 컨테이너의 용량을 초과해서는 안 된다. 배낭 유형 문제의 변형으로는 다음과 같은 것들이 있다.0/1 배낭 문제: 물건들의 부분집합을 골라 총 가치를 최대화하되, 총 무게가 컨테이너의 용량을 넘지 않도록 한다.가능한 총 무게 찾기: 컨테이너 용량을 넘지 않게 임의의 부분집합으로 만들 수 있는 모든 총 무게를 구한다.정확히 채우는 경우의 수 세기: 총 무게가 정확히 컨테이너 용량이 되도록 하는 물건의 순서열이 몇 개인지 센다(순서가 중요할 수도 있고 중요하지 않..

PS/USACO Gold 2025.09.11

[RabbitMQ] Spring RabbitMQ 사용방법

RabbitMQ는 메시지를 수신하고 전달하는 메시지 브로커이다.이 글은 다음 RabbitMQ 튜토리얼을 Java 버전으로 따라가 본 상태라고 가정합니다.따라서, 주요 API의 스프링에서의 사용법을 언급하며,스프링부트의 org.springframework.boot:spring-boot-starter-amqp를 사용하고 있다고 가정합니다.만약 RabbitMQ가 처음이시라면, 다음 글을 순서대로 따라가보며 내부 원리를 이해해보시길 권장드립니다.[RabbitMQ Java] 가장 간단한 프로듀서-컨슈머 사용해보기 [RabbitMQ Java] 가장 간단한 프로듀서-컨슈머 사용해보기원래 RabbitMQ 는 할 생각이 없었고, Kafka를 해보려고 했는데Kafka Definitive Guide의 내용이 너무 방대해서 ..