호구당 연구소 호구당 연구소
[인공지능] RL(강화학습) 6강 -Carpole 구현 with DQN

[인공지능] RL(강화학습) 6강 -Carpole 구현 with DQN

이제 본격적으로 Cartpole 을 DQN 으로 구현해보자! 지금까지 FrozenLake 4x4 와 8x8 을 풀면서 강화학습과 DQN 이론을 모두 다뤘으므로 자세한 설명은 생략한다. 전체 소스코드는 다음과 같다. FrozenLake 때와 논리가 완전히 같다. 다만, 다음과 같은 코드가 추가됐는데 이건 실제 학습이 제대로 됐는지 시각적으로 확인하려고 신경망을 파일 형태로 저장한다. 이제 실행해보자. 초반 에피소드에는 100 이상도 못 버틴다. 계속 학습해보자. 후반부에는 200까지 버티는 모습을 볼 수 있다. * Cartpole 자체가 200 이상 버티면 자동으로 종료하게 되어 있어 얼마나 더 버티는지는 확인 불가 모든 학습이 끝나면 코랩에 다음과 같은 파일이 생성된.......
[인공지능] RL(강화학습) 5강 -Carpole 준비

[인공지능] RL(강화학습) 5강 -Carpole 준비

오늘은 상태가 유한하지 않은 Cartpole을 강화학습 할 것이다. https://gym.openai.com/envs/CartPole-v1/ 카트폴은 쉽게 말해서 좌, 우 컨트롤만으로 연필을 떨어뜨리지 않게 최대한 버티는 문제다. 카트폴에서 환경요소는 총 4개(카트 위치, 카트 속도, 막대 각도, 막대 각속도) 이다. 앞서 다룬 FrozenLake 4x4 경우엔 상태가 16개로 딱 유한하게 정해졌다. 근데 카트폴 상태 가짓수는 사실상 무한하다고 볼 수 있다. 카트 위치만 해도 FrozenLake 처럼 딱딱 떨어지는 이산적인 값이 아니라 연속적인 값인데 속도와 각도는 더 말해 무엇하겠는가? 이런 상태가 무한한 문제에서는 전 강의에서 잠깐 다뤘던 배열로는 예상 보상값을 저장할 수 없.......
[인공지능] RL(강화학습) 4강 - Frozen Lake 8x8 with DQN 구현

[인공지능] RL(강화학습) 4강 - Frozen Lake 8x8 with DQN 구현

이제는 8x8 짜리 더 큰 맵에서 DQN 을 적용해보자! 푸는 논리는 똑같다. 다만 맵이 더 커졌으니 신경망을 더 깊게 구성하고 일부 변수를 수정했다. 전체 소스코드는 다음과 같다. 이번엔 리플레이 버퍼에 충분한 데이터를 쌓고 학습하도록 500번째 에피소드부터 Training 한다. 그리고 4x4 에서는 rewar에 별도의 값을 넣었는데 이번에는 모두 0으로 놓고 오로지 Goal에 도달할 때의 reward만을 믿고 돌렸다. 또한 언제까지 돌릴지 막연하여 만번까지로 에피소드를 늘렸다. 코드의 전체 논리는 4x4 때와 똑같으니 추가 설명은 생략하도록 하겠다. 돌려보면 다음과 같은 결과가 나온다. 에피소드 900번대까지 돌려도 갈피를 못 잡는 걸 볼 수 있다.......
[인공지능] RL(강화학습) 3강 - Frozen Lake with DQN 구현(2)

[인공지능] RL(강화학습) 3강 - Frozen Lake with DQN 구현(2)

저번 강의 내용을 복습하자. 우리 목표는 해당 신경망에 FrozenLake의 현재 상태를 입력할 때, 최적의 행동을 출력하게 만드는 것이다. 그런데 MNIST 손글씨와 Fashion MNIST 경우와 달리 강화학습에서는 학습시킬 정답 데이터가 존재하지 않는다. 그렇다면 어떻게 강화학습에서 신경망을 학습시킬 수 있을까? 강화학습 1강 이론에서 살핀 식이 다시 나왔다. 이 식을 DQN 에 접목해보자. 우리가 설계한 신경망은 상태 S 를 넣었을 때, 각 액션의 보상값인 Q(S, A)를 리턴하는 것이다. 그렇다면 이 신경망을 어떻게 학습시킬 것인가? 혹시 식에 답이 있다는 것이 느껴지는가? 해당 식은 맨 좌측에 있는 괄호 식을 학습률에 따라 조금씩 반영시켜서.......
[인공지능] RL(강화학습) 2강 - Frozen Lake with DQN 구현(1)

[인공지능] RL(강화학습) 2강 - Frozen Lake with DQN 구현(1)

본격적으로 Frozen Lake 예제를 살펴보며 이론을 더 이해해보자. 우리가 탐험할(?) 호수는 다음과 같이 생겼다. 우리는 0칸인 start에서 시작해서 빙판이 깨진 5, 7, 11, 12 칸을 피하고 15칸인 goal 에 도달해야 한다. 일단 구글 코랩을 통해서 맵을 로딩해보자. 돌리면 다음과 같이 나온다 ( 랜덤이니 내가 돌린 결과와 다르게 나올 수 있다. ) 출력한 결과 그대로 읽으면 된다. 이 경우에는 출발지에서 Right 했다가 Down 해서 구멍에 빠졌다. 이 코드에서 중요한 함수는 다음과 같이 2개다. ㅁ action = env.action_space.sample() 랜덤으로 행동을 받는다. 행동은 동서남북이며 숫자 0~3 값을 돌려주는데 다음과 같이 매핑되어있다. ㅁ.......
[인공지능] RL(강화학습) 1강 - 이론

[인공지능] RL(강화학습) 1강 - 이론

오늘은 RL(Reinforcement Learning), 강화학습을 알아보자! 보통 강화학습을 배우면 복잡한 수식이 난무하며 큰 그림을 이해하기 어렵다. 여기서는 강화학습의 핵심 아이디어만 설명하고 바로 예제로 넘어가도록 하겠다. https://becominghuman.ai/the-very-basics-of-reinforcement-learning-154f28a79071 환경(Environment)을 관찰(Observation) 하고, 보상(Reward)을 최대한 받을 수 있도록 행동(Action) 강화학습 기본논리는 한 장과 한 문장으로 요약 가능하다. 쥐가 미로에 던져졌다. 쥐는 미로에 대해 아무것도 모르지만, 치즈를 찾고자 한다. 쥐는 미로(Environment, 환경)을 유심히 관찰(Observation) 한 후, 행동(Action)한다. 미로가.......
[인공지능] Fashion MNIST(옷 인식) 2강 - DNN 과 CNN 구현 with Tensorflow(텐서플로우)

[인공지능] Fashion MNIST(옷 인식) 2강 - DNN 과 CNN 구현 with Tensorflow(텐서플로우)

https://colab.research.google.com/?hl=ko Fashion MNIST(옷 인식) 문제를 먼저 기존 신경망(DNN) 방식으로 풀어보자. 그 다음에 CNN 방식으로 풀며 정확도를 높힐 것이다. 코랩에 들어가서 다음과 같이 작성하자! 128 노드가 있는 히든레이어 1층짜리 신경망이다. 실행하면 정확도가 다음과 같이 약 87% 나온다. 층을 더 깊게 하고 학습 횟수를 5회에서 20회로 늘려보자! 돌려보면 89% 로 약 2%p 정답률이 증가했다. 이제는 CNN 방식으로 바꿔서 돌려보자! 손글씨 MNIST 인식때와 논리를 똑같이 구성했다. 중간에 삽입된 model.summary() 코드는 현재 만들어진 신경망 모델 정보를 출력한다. 우리가 만든 CNN 은 다음과 같은 구조다. 아무.......
[인공지능] Fashion MNIST(옷 인식) 1강 - 데이터 읽기

[인공지능] Fashion MNIST(옷 인식) 1강 - 데이터 읽기

MNIST 손글씨 인식에 이어서 Fashion MNIST 옷 인식을 해보자! MNIST 손글씨 인식과 마찬가지로 Fashion MNIST 데이터도 준비되어 있다. https://colab.research.google.com/?hl=ko 당장 코랩에 들어가 다음과 같이 입력해보자 테스트 데이터를 읽고, 255로 나눠서 정규화(0~1) 시키는 건 MNIST 때와 똑같다. 다만, 정답값이 MNIST 에서는 0~9 였는데 Fashion MNIST 에서는 옷 종류다. 그래서 class_names 라는 리스트를 따로 만들어서 정해진 정답 숫자값이 무엇을 뜻하는지 알게끔 하자. 잘 입력받았는지 MNIST 때와 똑같은 방식으로 확인해보자 실행해보면 아래와 같이 결과가 잘 나온다. 다음 강의에서는 다층신경망(DNN)을 구성해서 실.......
[인공지능] MNIST(손글씨 인식) 5강 - CNN 구현 with Tensorflow(텐서플로우)

[인공지능] MNIST(손글씨 인식) 5강 - CNN 구현 with Tensorflow(텐서플로우)

https://colab.research.google.com/?hl=ko 구글 코랩에 들어가자! CNN은 기존 3강에서 구현한 신경망에서 사진 특징을 추출하는 층이 추가됐다. 전체 코드에서 층을 추가한 부분만 설명하고, 나머지 설명은 3강을 참고하면 되겠다. 뭔가 조금 복잡해졌다. 3강 코드와 비교해서 변한 부분만 살펴보자. 차원을 하나 더 추가했다. 지금까지 한 픽셀의 값만(0~255) 있다고 알았는데 이건 흑백사진일 때만 그렇다. 원래는 3채널(R, G, B) 라고 해서 한 픽셀은 3개의 값을 가지고 있어야 비로소 컬러 사진을 표현할 수 있다. 근데 우리의 손글씨 데이터는 흑백사진이니까 채널을 1개 확장한 것뿐이다. 사실상 달라지는 건 없다. 사진 특징을 추출.......
[인공지능] MNIST(손글씨 인식) 4강 - CNN 이론

[인공지능] MNIST(손글씨 인식) 4강 - CNN 이론

오늘은 CNN 기법을 알아보자! CNN은 이미지 딥러닝에 좋은 성능을 낸다. 왜 그럴까? 3강에서 살펴본 신경망을 복습해보자. 저번 시간에는 한 칸에 픽셀값(0~255)이 들어있는 2차원 행렬 28 x 28 값을 1차원 행렬 784로 펴서 Input 레이어에 넣었다. 그런데 이렇게 2차원짜리 값을 1차원으로 단순하게 피게 되면 사진 고유의 특징이 뭉게진다는 단점이 있다. CNN의 핵심은 2차원 사진값의 특징을 최대한 뽑아내고 정제한 후에 1차원으로 피는 것이다. 기존 과정(CLASSIFICATION, 3강에서 했던 신경망 학습) 전에 FEATURE LEARNING 으로 사진 특징을 뽑는다. 특징을 뽑는 건 크게 CONVOLUTION 과정과 POOLING 과정이 있으며, 이 두 연산을 계속 반.......
선을 묻는 이에게

선을 묻는 이에게

평소 불교에 관심이 많아서 기독교의 성경 같은 불교책을 읽고 싶었다. 그러다가 책을 선물받았는데, 그 중 하나가 『선을 묻는 이에게』 이다. 불교의 심오한 교리를 자세히 알진 못한다. 하지만 교종과 선종은 어렴풋이 알고 있었다. 교종은 경전 중심의 수행방법을 말하고, 선종은 마음과 깨달음 중심의 수행방법을 뜻한다. 『선을 묻는 이에게』 를 거칠게 요약하면, 선종의 수행방법을 따르라는 지침서이다. 글은 결국 사람이 만든 것이니, 마음의 깨달음을 글로 옮기는 순간 왜곡이 발생한다. 그래서 경전에 의존하지 말고, 먼저 마음의 깨달음을 얻어 자신만의 수행기준을 명확히 세워야 한다는 것이다. 내가 좋아하는 드니 발뇌브 감독의.......
죄와 벌

죄와 벌

초인을 꿈꾼 한 청년이 기독교적 구원을 받는 이야기 도스토옙스키는 『죄와 벌』 『백치』 『악령』 『미성년』 『카라마조프가의 형제들』 5개 장편소설을 집필했다. 나는 『죄와 벌』 을 읽기 전, 『카라마조프가의 형제들』 과 『악령』 을 읽었다. 도스토예프스키 소설에 나오는 대부분 인물은 어느 정도 맛이 가 있어(...) 인물의 행동을 이해하기 쉽지 않다. 때문에 『카라마조프가의 형제들』 은 거의 2개월간 읽었고, 『악령』 은 1개월간 읽었다. 그래서 『죄와 벌』 을 읽기 시작했을 때, 최소 한 달은 걸리겠다 싶었다. 그런데 웬걸, 다 읽는 데 일주일도 안 걸렸다. 내 생각 이상으로 흡입력이 있는 소설인 것이다. 그리고 깨달았다.......
『포켓몬스터 레츠고! 피카츄』 리뷰

『포켓몬스터 레츠고! 피카츄』 리뷰

반복하는 명작의 재미 ( ) 포켓몬스터가 유명하긴 하지만, 애니메이션만 봐서 언젠가 게임을 직접 해봐야겠다고 생각했었다. 마침 닌텐도 스위치를 가지고 있었던터라, 1세대 포켓몬스터 게임인 레드/그린을 바탕으로 리메이크한 레츠고 피카츄를 플레이해봤다. 1. 스토리() 포켓몬스터 시리즈에 큰 스토리는 항상 같은 것 같다. 체육관 열심히 돌아다니며 악의 무리를 응징하고, 여행의 마지막엔 초고수 트레이너와 맞붙어 승리하는 것이다. 플롯 자체는 굉장히 단순하지만, 관동지방이라는 곳을 여기저기 탐험하는 느낌이 강하므로 이런 단점이 어느정도 상쇄되는? 느낌이다. 2. 게임성() 포켓몬스터의 가장 큰 특징은.......
『어쌔신 크리드 : 오디세이』 리뷰

『어쌔신 크리드 : 오디세이』 리뷰

방구석 그리스신화 여행 패키지 ( ) 1. 스토리() 위쳐 3와 같이, 각 퀘스트마다 선택지를 어떻게 선택하는지에 따라 엔딩이 달라질 수 있게 만들었다. 개인적으로 이 방식은 별로인데 왜냐면 위쳐 3에서 가장 최악의 엔딩을 본 후에 내가 선택한 고작 자그마한 것들이 이런 엔딩을 만들었다는 것에 큰 충격(?)을 받았기 때문이다. 특히 오디세이의 메인퀘스트가 이런 시스템을 그대로 차용했는데, 난 이러한 사실을 전혀 모르고 플레이했다. 근데 다행히도 가장 좋은 엔딩을 봐서 기분이 위쳐 3 때와는 사뭇 달랐다. 나중에 찾아보니까 불행한 엔딩들이 많았는데 아마 이 엔딩을 봤더라면 스토리 평점을 한 단계 더 낮췄을지도.......
제16회 정보보안기사 필기 후기

제16회 정보보안기사 필기 후기

이런저런 이유로 보안이나 컴퓨터 네트워크 쪽을 제대로 공부할 기회가 없었다. 그래서 정보보안기사 자격증을 취득하면 좋겠다는 생각이 들어 시험을 응시했다. 원래 9월 중순 정도에 보기로 되어있던 시험이 코로나 때문에 11월까지 연기되어 공부하는 흐름을 유지하는 것이 어려웠다. 책은 시중에 나와있는 유명한 것들로 준비했는데, 필기는 아무 책이나 붙잡고 공부해도 될 것 같다. 근데 예상 외로 수험서에서는 보지 못했던 개념들이 좀 많이 나와서 당황스럽긴 했는데(시스템보안은 문제지만 대략적으로 살펴보고는 생소한 게 많아서 과락하는 줄 알았다), 상식적인 선상에서 생각해서 풀었더니 많이 틀리진 않은 것 같다. 이제 문제는 실.......
[단편소설]시시포스 신화 - 갈증

[단편소설]시시포스 신화 - 갈증

알베르 카뮈의 시지프 신화를 읽고, 여러 가지 생각이 떠올라서 이를 짧은 단편으로 표현해보았다. 앞으로도 책을 읽으면 독후감을 쓰는 느낌으로 여려 단편들을 올릴 것 같다.잠에서 깨어나서 시계를 보니 새벽 5시였다. 어제 회사에서부터 – 직원들 앞에서 내색은 하지 않았으나 - 기분은 여러모로 착잡했고, 결국 오늘 같은 중대한 날에 잠을 설치고 만 것이었다. 평소와 마찬가지로 일찍 잠자리에 들며 최대한 의식하지 않으려 했으나 소용이 없었던 모양이다. 나는 침대에서 반쯤 일어나서 유리 너머 도시의 전경을 지켜봤다. 빛으로 반짝이는 수많은 건물이 즐비하게 나열되어 있으며, 비가 와서 그런지 한층 멋있는 분위기를 자아내.......
[ Webhacking.kr] 4번 (레인보우 테이블)

[ Webhacking.kr] 4번 (레인보우 테이블)

https://webhacking.kr/challenge/web-04/ 해시값이 제시되었고, 이에 맞는 원본 값을 입력하면 풀 수 있는 문제입니다. 근데 SHA1 방식의 해시함수를 무려 500번이나 돌려서 나온 값이 출력되고 있습니다. 일반 웹사이트에서 제공하는 레인보우 테이블를 사용할 수 없게끔 한 것이니... 우리가 직접 레인보우 테이블을 만드는 수밖에 없습니다 ㅡㅡ 파이썬으로 위와 같이 작성한 후, 신나게 돌려봅시다. 그런데... 25% 정도 진행해도 용량이 무지막지하게 커졌습니다. 저는 여기서 파일출력을 멈추고, 새로고침 신공으로 1/4의 확률 때려맞추기로 방향을 바꿨습니다. 때려맞추기를 하다보면 아래와 같이 운이 좋은 상황이 나올 겁니다. 그러면 번.......
[ Webhacking.kr] 22번 (BLIND SQL INJECTION&패스워드 암호화)

[ Webhacking.kr] 22번 (BLIND SQL INJECTION&패스워드 암호화)

https://webhacking.kr/challenge/bonus-2/ admin으로 로그인하는 문제입니다. 비밀번호를 알아내야겠군요 Join을 통해서 아이디 test, 비번 1로 가입 후 로그인해봅시다. hash 값이 나온 것을 보니 비밀번호를 해시함수에 돌린 후에 저장하는 것 같습니다. 해시함수로 저장된 비밀번호를 알아내려면 레인보우 테이블을 이용하는 수밖에 없습니다. https://crackstation.net/ 인터넷 사이트를 통해 해당 해시값을 한번 돌려봅시다. 해시타입이 md5 이라는 것과 비밀번호 해시 전에 뒤에 apple 이라는 단어를 추가해서 솔트치는 것을 알 수 있습니다. 그러면 이제 BLIND SQL INJECTION을 통해서 admin 비밀번호의 해시값을 알아봅시다. 질의문이 정.......
[ Webhacking.kr] 8번 (SQL INJECTION&피들러)

[ Webhacking.kr] 8번 (SQL INJECTION&피들러)

https://webhacking.kr/challenge/web-08/ 코드를 바로 봅시다. $result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'"); 의 쿼리값이 admin을 리턴하도록 하면 됩니다. 근데 밑에 INSERT 쿼리를 보면 id가 무조건 guest 로만 설정되어 있는데... SQL INJECTION을 통해서 INSERT 문을 변경합시다. $agent의 값을 answer','{$ip}','admin')# 으로 넣으면 INSERT 문을 통해 id값이 admin인 튜플을 삽입할 수 있습니다. 그 후에 $agent를 answer 로 날려주면 SELECT 문이 admin을 출력할 겁니다. 피들러(Fid.......
[ Webhacking.kr] 21번 ( Blind SQL INJECTION )

[ Webhacking.kr] 21번 ( Blind SQL INJECTION )

https://webhacking.kr/challenge/bonus-1/ 대놓고 BLIND SQL INJECTION 이라고 적혀있습니다. 참, 거짓만을 이용해서 데이터베이스 정보를 탈취해봅시다. id 에다가 ' OR 1=1# 을 입력하면, Result에 Wrong Password 라고 출력됩니다. 반대로 ' OR 1=2# 을 입력하면, Login Fail 이 뜹니다. 즉, OR 뒷부분의 쿼리가 참이면 Wrong, 거짓이면 Login 이 출력됨을 알 수 있습니다. 목표는 admin 아이디로 로그인 하는 것이므로, 이에 맞는 비밀번호를 찾는 것이 필요합니다. 원래는 비밀번호를 담고 있는 애트리뷰트(속성) 값을 알아야 하는데... pw 라고 적혀 있으니 그대로 입력해서 확인해봅시다. ' OR pw IS NOT NULL#.......
ⓒ 2022 [호구당 연구소] All rights reserved.
Supported by Keyzard