본문 바로가기

분류 전체보기110

강화학습의 종류 바둑의 한 수는 그 즉시 평가되기 어렵다. 여러 선택이 모여 종국 되었을 때 계가를 해봐야 이겼는지, 졌는지에 대한 reward를 받을 수 있다. 따라서 현재의 행동을 결정할 때 미래의 가치도 판단해야 한다. 이때 미래 가치는 에피소드라 불리는 종료 시점까지 탐색하는 하나의 시나리오가 끝나야 알 수 있다. 마지막에서야 알 수 있는 그 미래의 가치를 평가해서 현재 택할 수 있는 최선의 행동을 찾아야 한다. 미래를 고려한 최선의 선택을 해야 하는 문제는 아주 많다. 미로 찾기를 대표적으로 예를 들 수 있다. 현재 미로의 입구에 서있고, 출구를 찾아 탈출하는 환경을 생각해보자. 이 같은 문제는 강화 학습을 하는 방법으로 가치기반 학습과 정책기반 방식을 사용할 수 있다. 가치 기반 학습 Q learning 현재.. 2019. 11. 3.
알파고의 원리와 그 버전들 알파고(AlphaGo)로 통칭되지만 실제 바둑 ai는 여러 버전이 있다. 이세돌을 이긴 알파고 lee, 타이젬 등 온라인 사이트에서 60연승 후 마지막 공식 대국으로 커제와 겨뤘던 알파고 master, 이 모든 걸 뛰어넘은 알파고 zero까지 있다. 각 버전이 등장하는 순간을 바둑을 좋아하는 개발자로서 실시간으로 목격하는 즐거움이 매우 컸다. 머신러닝은 잘 몰라서 알파고 실력에만 감탄하며 봤지만 이젠 익숙한 단어들도 조금씩 들려서 정리해봤다. 바둑 ai를 만든다고 생각해보자. 머신러닝 지식 없이 컴퓨터로 봇을 만든다면 모든 경우를 탐색해서 가장 좋은 한 수를 두겠지만 바둑도 그렇고 현실 세계에서는 모든 경우의 수를 다 해볼 수 없다. 다 할 수만 있다면 minimax 알고리즘으로 서로 최선을 다할 때 누.. 2019. 11. 3.
AWS VPC(Virtual Private Cloud) 구성 컴퓨터 하나를 빌려서 웹 서비스를 한다고 하면 복잡한 설정 없이 그냥 ec2 하나 빌리면 된다. 하지만 서비스가 복잡해지고, 각 서비스끼리 통신을 하고, 보안 규칙을 세우다 보면 복잡도가 매우 커지게 될 것이다. 이를 개선하기 위해 새로운 개념이 생기고, 새로운 기능이 생긴다. 한 번에 이해하기에는 헷갈릴 수 있으나 각 서비스의 등장 배경을 알면 쉽게 이해할 수 있기 때문에 서비스 하나씩 따라가 보자. 각 시나리오 별로 의도에 맞게 VPC를 구성하는 게 물론 중요하지만 큰 그림을 먼저 그려보기 위해 public / private subnet만 가지는 구성도를 그려보면 다음과 같다. 정확하진 않지만 각 서비스의 역할을 이해하는 데에는 문제없을 것이다. VPC 생성 VPC를 생성하려고 하면 CIDR 블록을 .. 2019. 10. 24.
RFC1918과 CIDR 블록 인터넷을 사용하는 도메인이라면 IP가 있고, 그 IP가 중복이 되면 서로 구분할 수 없다. 따라서 각 IP가 유일하도록 관리하고 분배하는 주체가 있다. ICANN을 필두로 그 권한을 이어받아 ISP가 내가 사용하는 IP를 설정해준다. 하지만 회사나 네트워크에서는 모든 도메인에 공인 IP를 줄 순 없으니 여러 네트워크에서는 앞단에 라우터 하나를 두고 안쪽에서는 private network로 구성해서 사용한다. 그러면 공인 IP와 사설 IP를 구분할 기준이 필요한데 국제 인터넷 표준화 기구(IETF)에서 그 대역을 정했다. 권고 사항이긴 하지만 어길 경우에 이를 해석하는 과정에서 충돌이 일어날 수 있기 때문에 지켜야 한다. RFC1918 IP 대역 CIDR 10.0.0.0 – 10.255.255.255 10.. 2019. 10. 24.
jq로 JSON 처리하기 api 응답으로 json을 받은 경우 쉽게 데이터를 가공할 수 있는 jq에 대해 정리해본다. 커맨드라인 명령어인 만큼 최소한의 문법만 알아도 유익하게 사용할 수 있다. 설치 $ brew install jq 사용법 아래와 같은 json이 있을 때 입맛에 맞게 가공해보자. $ cat sample.json {"data":{"name":"myname","values": [{"id": "id0","url": "url0"},{"id": "id1","url": "url1"},{"id": "id2","url": "url2"}]}} 파싱 하기 jq .로 jq로 전달할 json을 넘길 수 있다. 추가적인 속성이 없기 때문에 별다른 처리 없이 바로 출력을 뱉지만 기본으로 파싱하는 과정을 거쳐 불필요한 공백을 없애고 보기 좋.. 2019. 10. 23.
Python 개발 가상환경 설정 시작이 반이라는 말이 과장처럼 느껴지지만 개발환경 설정하는 데에 있어서는 참 공감 가는 말이다. 물론 별다른 설정 없이도 코드 돌리는 건 큰 문제가 되지 않지만 이왕 하는 거 각 문제점을 생각해보면서 개발환경을 구축해보자. Python 버전 관리 python은 크게 2.x, 3.x 로 나뉘는데 문법부터 시작해서 다른 점이 많아 프로젝트 별로 python 버전이 다르면 실행 환경을 바꿔줘야 한다. 매번 python path를 바꾸거나 명령어를 다르게 치는 건 피곤하니 pyenv 를 사용한다. 비슷한 기능으로 virtualenv, pyvenv 가 있지만 내장 기능으로 사용할 수 있는 pyenv를 사용했다. pyenv는 기존 설치된 python과 별도로 관리되기 때문에 사용하고자 하는 버전을 추가로 설치해야 .. 2019. 10. 20.