목록전체 글 (37)
버티의 블로그
앞장에서 본 SARSA와 Q-Learning는 Table로 만들어서 값을 기억하는 방법이라 할 수 있는데, 현실은 continuous state space이기에 state가 거의 무한대에 가까우므로 수용할 메모리도 부족하고 계산도 기하급수적으로 복잡해진다. 따라서 이제부터는 value function의 근사값을 사용하고자 한다. 그래서 이제는 w라는 새로운 변수로 value function 값을 함수화하는 것이다. 그림으로 다시 보면, w라는 파라메터로 조정되는 함수가 state나 action값을 받아 근사값을 출력해낸다. 그래서 앞으로는 학습을 통해 Q function을 업데이트 하는 것이 아닌 w를 업데이트를 하게 된다. 여기서 업데이트를 하는 방식은 Gradient Descent이다. Gradi..
Page Replacement AlgorithmOptimal Algorithm사실 페이지 교체 시 가장 이상적인 알고리즘은, 미래에 사용될 페이지 중 가장 적게 사용할 페이지를 교체해주는 것이다. 위에서도 frame이 7, 0, 1까지 채워진 상황에서 미래시를 보면 7을 가장 나중에 사용하기에 7을 2로 교체해준 것을 볼 수 있다. 그러나 당연히도 이 방법은 미래를 알 수 없기에, 이 알고리즘과 가장 비슷한 성능이 나오는 알고리즘을 찾고자 한다.FIFO Algorithm 기존의 FIFO와 동일한 개념으로, 가장 처음 들어온 페이지를 교체해준다. 언제나 단순한 방법이지만 그다지 좋은 성능을 보이지 못하며, 아래와 같이 특정 frame 수에서 오히려 page fault수가 늘어나는 Belady's Anoma..
이번 장에서는 TD를 사용하는 model-free control 중on-policy에서의 SARSA와 off-policy에서의 Q-Learning을 알아본다.SARSATD(0)에서 state value를 업데이트하는 식은 다음과 같았다.이를 action value function을 적용하여 표현하면 다음과 같을 것이다.기존 state value function을 사용했던 것과 다르게 action value function을 사용해서 state와 action의 pair을 통해 계산되는 것을 볼 수 있는데, 이를 SARSA라고 한다. SARSA는 현재 policy를 통해 얻어낸 A와 A'으로 바로 policy를 업데이트 하므로 on-policy 방식이라 할 수 있는 것이다. SARSA는 이전 장에서 언급한 ..
기존에는 프로세스 전체를 메모리에 load하고 빼는 Swapping이란 방식을 사용했다. 그러나 이 방법으로 하면 오랜 문맥 교환 시간이 소요될 뿐더러, 메모리 용량보다 더 큰 프로그램은 실행할 수 없었고 프로세스들의 버퍼는 OS 영역 안에 남아있다는 문제점이 존재했다. 또한 다음과 같은 I/O 문제도 있었다.Pending I/O : 대기 중인 I/O가 있을 경우에 swapping을 하면 잘못된 프로세스에 I/O가 전달될 수 있다.Double Buffering : Pending I/O를 해결하기 위함으로, 데이터를 커널 공간으로 한번 더 전송한 후 I/O 디바이스로 전송하는 방식인데, 이는 추가적인 오버헤드를 발생시킨다.따라서 아래의 virtual memory를 사용하게 되었다. Vitrual memor..
앞선 3장에서는 MDP 환경에서 policy를 evaluation하고 improvement하는 방법을 공부했는데, 이제 model-free 상황에서 어떻게 좋은 policy를 얻어낼 것인지를 살펴볼 것이다. 6장은 이를 위한 기초를 잡고 가는 단원이라 생각하면 된다.On and Off-Policy LearningOn-Policy : 현재의 policy로 샘플링을 하여 현재 policy를 개선해 나간다. 즉 에이전트가 행동을 선택하고 그 행동의 결과를 기반으로 policy를 업데이트 해간다.SARSAOff-Policy : 에이전트가 샘플링을 위한 정책(행동 정책)과 학습을 위한 정책(목표 정책)으로 나누어 policy를 개선한다. 행동 정책에서 더 다양한 탐험을 하여, 목표 정책에 가까워지게 하는 것이 목..
Segmentation segmentation은 프로그램을 segment로 나누어 관리하는 방식이다. 여기서 segment table을 사용하는데, 이 테이블로 각 segment의 시작 주소와 크기를 관리한다. 그래서 segment 번호를 이용해 segment의 메모리 주소를 찾는데 사용된다. s : segment 번호, 이걸로 segment의 base값을 찾는다.d : offset, segment의 최대 크기, d값이 limit보다 작아야만 유효하므로 검사한다.이 둘을 더해서 최종 메모리 주소를 찾는다.segment table은 프로세스마다 다르게 가지므로, context switch 발생 시 테이블도 변경돤다. 따라서 다음 레지스터들로 테이블 정보를 기억한다.STBR(Segment-table base..