보호되어 있는 글입니다.

그래프의 개념 그래프는 노드(node)와 그 노드들을 연결하는 간선(Edge)을 하나로 모아 놓은 자료 구조입니다. 즉, 연결 되어 있는 객체 간의 관계를 표현할 수 있는 자료 구조입니다. 이미 생활 속에서도 그래프 알고리즘이 적용되어 있습니다. 지도나 지하철 노선도를 확인하거나 최적의 경로를 찾아주는 데 사용한 것이 바로 그래프 알고리즘 입니다. 그래프와 트리의 차이 그래프 트리 정의 노드와 그 노드를 연결하는 간선을 하나로 모아 놓은 자료구조 그래프의 특별한 한 케이스('최소 연결 트리'라고도 불림), DAG(Directed Acyclic Graph. 방향성이 있는 비순환 그래프)의 한 종류 방향성 방향 그래프(Directed), 무방향 그래프(Undirected), 가중치 그래프(Weight), 부..

Frozen Lake: Random 위 환경을 얼음판이라고 한다면 구멍(H)에 빠지지 않고 출발점(S)에서 목표(G)까지 도달해야 합니다. 인간인 우리는 쉽게 목표지점까지 도달할 수 있지만 에이전트는 그러지 못합니다. 그래서 처음에는 Random함수를 돌려 우연의 산물로 목표지점까지 도달하는 방법을 사용했었습니다. 하지만 이런 방법은 우연의 산물이기 때문에 결과를 예측하기 어렵고 효율성도 떨어졌습니다. 그래서 나온 것이 Q-learning입니다. Q-learning에 대해 알아보기 전에 먼저 Dummy Q-learning에 대해 알아보도록 하겠습니다. Dummy Q-learning 위와 같이 Q-learning의 핵심은 에이전트가 액션을 취하기 가장 좋은 길(즉, 가장 확률이 높은)을 액션을 취하기 전에..
Value Function(가치 함수) 먼저 value function(가치 함수)를 설명하기 위해 간단하게 MDP에 대해 설명해 보려 합니다. MDP에서 에이전트는 각 상태에서 보상을 극대화하기 위한 정책. 즉. 앞으로 받을 것으로 예상되는 보상의 기댓값을 고려하여 행동을 선택하게 됩니다. 여기서 앞으로 받을 것으로 예상되는 보상의 기댓값을 value function이라고 표현한다. 가치함수는 크게 State-value function과 Action-value function 두 가지로 구분이 됩니다. State-value function 에이전트가 $t$시점에 $s$에서 행동 $a$ 선택하고 reward $r$을 받는 것을 매 시점마다 반복해 나가 그때 받았던 일련의 보상의 합을 구하면 다음과 같습니..

확률 프로세스의 확장 MP(Markov Property) 모델에다가 새로운 개념인 액션(action)을 추가해 보도록 하겠습니다. 이제 각 상태(state)에서 다른 상태(state)로의 이동시, 발생하는 작업 행위를 액션(action)이라고 정의합니다. 그리고 이 때 어떤 상태에 있느냐에 따라 취할 수 있는 액션이 다를 수 있습니다. 상태 $x$에서 취할 수 있는 액션을 $A(x)$라 하면 $A(x) \in A$입니다. 하지만 액션 자체가 상태에 종속적인 개념은 아니니 혼동하지 마세요. 특정 상태에서만 사용 가능한 한정된 액션이 정의되어 있고, 이러한 액션을 모두 묶어놓은 전체 액션 집합을 정의할 수 있습니다. 그리고 앞서 정의한 전이 확률 함수에 액션에 대한 속성이 포함되게 됩니다. $P_{xy}^a..

강화 학습을 시작했다면 가장 먼저 이해해야 할 모델은 MDP(Markov Decision Process)입니다. 하지만 MDP를 이해하기 전에 MP(Markov Process) 모델부터 알아야 합니다. 먼저, MC는 이산 확률 프로세스(discrete sochastic process)입니다. 여기서 확률 프로세스란 확률 분포를 가진 랜덤 변수가 일정한 시간 간격으로 값을 발생시키는 것을 모델링하는 것을 의미합니다. 위와 같은 그림을 Markov Chain이라고 합니다. 각각의 state로 움직일 때의 확률이 나와있고, 이 그림 같은 경우에 시간이 무한대로 흐른다면 모두 sleep으로 수렴하게 될 것입니다. 그리고 더 이상 변화가 없기 때문에 stationary distribution이라고 합니다. MC에..
객체 지향에서 위임이란 클래스의 특정 기능들을 대신 처리해 주는 것을 말합니다. 코틀린은 기본적으로 상속이 허용되지 않는데, 개발을 하다 보면 상속이 불가능한 클래스도 새로운 동작을 확장하거나 수정해 활용해야 하는 경우가 있습니다. 클래스를 상속하지 않고 기존 클래스의 일부 메서드를 변경하거나 새로운 기능을 확장하는 방법이 위임 입니다. 위임을 사용하는 대표적인 패턴에는 데코레이터(Decorator) 패턴이 있습니다. 데코레이터 패턴은 그 이름처럼 특정 클래스의 기능에 추가 기능을 덧붙이는 방법입니다. 데코레이터 패턴은 특정 클래스에 기능을 덧붙이고자 위임을 사용하는데, 자바로 이해해 봅시다. public final class Sword{ String name; public Sword(String nam..
코틀린은 기본적으로 상속이 불가능합니다. 상속을 하기 위해서는 open이라는 키워드를 사용해야 합니다. 이렇게 하는 이유는 객체 지향에서 상속을 잘 못 사용할 경우 많은 문제가 발생하기 때문입니다. 이를 이해하기 위해 상속에 대해 더 구체적으로 알아봅시다. 상속은 반복되는 중복 코드를 줄여 주는 객체 지향 프로그래밍 핵심 기법 중 하나입니다. 상속은 2가지 측면에서 접근 가능합니다. 하나는 코드 구현에 대한 상속이며, 또 다른 하나는 인터페이스 집합에 대한 상속입니다. 인터페이스 상속은 코드를 포함하고 있지 않기 때문에 다중 상속이 가능합니다. 하지만 구현 상속은 다중 상속 시 문제가 생깁니다. 구현 상속은 실제 코드가 포함되어 있기 때문에 만약 상속받는 2개의 클래스에 똑같은 이름의 메서드가 있다면 어..