본문 바로가기

Data Science

(158)
[강화학습] 강화학습을 모델로! Q-learning, Q-Network, DQN 🔊 해당 포스팅은 딥러닝 파이토치 교과서 서적의 강화학습 챕터 내용과 김성훈 교수님의 강화학습 기초 강의를 기반으로 개인적인 학습 및 정리를 위해 작성되었습니다. 하단에 등장하는 모든 자료들은 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 저번 포스팅에서 학습한 MDP의 행동-가치 함수 이른바 Q-함수를 활용하는 Q-learning, Q-Network, 그리고 깊은 신경망을 적용한 DQN(Deep Q Network)에 대해서 알아보고, 이를 코드로 구현하는 방법을 소개한다. 해당 포스팅은 반드시 MDP의 행동-가치 함수를 이해해야 하므로 저번 포스팅을 읽고 오거나 해당 포스팅이 너무 내용이 길고 복잡하다면 직관적인 김성훈 교수님의 강의를 보고 오도록 하자. 1. Q-형님이 안내하는 곳으로, Q-..
[강화학습] 강화학습의 기반, 마르코프 결정 과정(Markov Decision Process) 🔊 해당 포스팅은 딥러닝 파이토치 교과서 서적의 강화학습 챕터 내용을 기반으로 개인적인 학습 및 정리를 위해 작성되었습니다. 하단에 등장하는 모든 자료들은 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 강화학습의 개념이 무엇인지 간단히 알아보고, 강화학습의 기반이 되는 마르코프 결정 과정(이하, MDP)에 대해 알아보도록 하자. 1. 강화학습의 5요소에 대해 알아보자 먼저 강화학습이란, 어떤 환경에서 에이전트가 어떤 행동을 했을 때, 그것이 잘한 행동인지 잘못된 행동인지를 판단하고 보상(또는 벌칙)을 주는 과정을 반복해서 에이전트 스스로 학습하게 하는 분야를 의미한다. 그래서 강화학습에서는 환경을 의미하는 '환경(Environment)' 이라는 것과 '에이전트(Agent)' 라는 구성요소를 사용..
[GenAI] 원본은 유지하되 스타일만 다르게 하기: CycleGAN, Style Transfer 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 그동안 배워온 기초적인 생성 모델링 기법을 활용해서 그리기 작업을 적용해보도록 하자. 여기서 '그리기'란 원본 데이터는 유지하되 약간 스타일만 다르게 하여 가짜 데이터를 생성하는 것을 의미한다. 대표적인 예시로는 스타일 트렌스퍼 작업이 있다. 예를 들어, 피카소 그림이 원본이지만 반 고흐가 해당 그림을 그렸을 때의 새로운 그림을 생성하는 것이다. 스타일 트랜스퍼는 입력되는 이미지에 내재된 분포를 모델링하는 것이 아니라 즉, 기존에 배웠던 GAN 모델처럼 원본 이미지랑 비슷한 이미지를 생성하는 것이..
[GenAI] 생성적 적대 신경망: GAN(Generative Adversarial Network), WGAN, WGAN-GP 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 지난 포스팅에서 배운 AE, VAE 모델과는 다른 메커니즘으로 동작하는 생성적 적대 신경망 이른바 GAN 이라고 불리는 모델에 대해 배워보자. 그리고 GAN의 한계점을 극복하는 WGAN, WGAN-GP 모델에 대해서도 배워보자. 1. 생성자 vs 판별자 간의 대결로 만들어지는 네트워크 GAN의 'A'는 Adversarial을 의미한다. 한국말로 하면 '적대적인'을 뜻한다. 왜 적대적인 의미를 담고 있을까? GAN은 생성자(Generator)와 판별자(Discriminator) 라는 두 네트워크의 ..
[GenAI] 기본적인 생성 모델: AE 와 VAE 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 생성 모델의 기본적인 구조인 AutoEncoder(AE)에 대해 알아본다. 그리고 AE의 단점을 살펴보면서 이를 극복해 해결하는 Variational AutoEncoder(VAE)에 대해서도 알아보자. 1. 잠재 공간의 특정 포인트에 매핑하는 모델: AE AE라고 불리는 AutoEncoder 모델은 사실 예전 포스팅에 소개한 적이 있다. 하지만 워낙 예전이고, 그 때 당시에는 생성형 모델 측면보다는 데이터를 복구하는 측면에서 AE에 대해배웠었다. 하지만 이번 포스팅에서는 생성형 모델 측면에서 AE..
[GenAI] 생성 모델링(Generative AI)이란 🔊 해당 포스팅은 OREILLY의 '미술관에 GAN 딥러닝 실전 프로젝트' 서적을 읽고 개인적인 목적 하에 작성되는 글입니다. 포스팅에 사용되는 모든 자료는 제가 직접 재구성하였음을 알립니다. 최근 사내 스터디에서 새롭게 다룰 주제로 생성형 모델링을 선택했다. 요즘 가장 화두인 생성형 모델링에 대해서 공부를 하기 시작해야 한다는 필요성이 생겼다. 물론 거대 기업에서 오픈소스로 나오는 생성형 모델을 가져다 쓰기만 하는 목적이라면 이 책이 그렇게 도움이 되지 않을 수 있다. 왜냐하면 이 책은 오픈소스 생성형 모델의 사용법에 대한 설명이 아니기 때문이다. 하지만 머신러닝 직무로 일하는 입장으로서, 적어도 생성형 모델이 어떤 목적성을 갖고, 또 어떠한 원리로 동작하는지는 최소한 알아야 하지 않을까 한다. 그러한..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 큰 도전으로(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 그동안 만들어온 Dezero라는 딥러닝 프레임워크가 더 복잡한 모델인 CNN, RNN도 구현할 수 있도록 기능을 고도화해볼 것이다. 그리고 난 후 대표적인 CNN, RNN 계열 모델인 VGG16, LSTM 모델을 Dezero만을 활용해 빌딩해보도록 하자. 드디어 책의 마지막 챕터이다. 이제 그 끝을 향해 달려나가보도록 하자! 1. CNN 메커니즘 - 2차원일 경우 CNN을 코드로 구현하기 위해서는 CNN에 대한 개념 이해가 선행되어야 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 큰 도전으로(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 어느덧 책의 마지막 챕터에 도달했다. 이번 포스팅에서는 그동안 만들어온 Dezero라는 나만의 딥러닝 프레임워크를 더 큰 도전을 향해 나아가도록 발전시켜본다. 학습시킨 모델의 파라미터를 저장하거나 로드하는 기능 뿐만 아니라 더 효율적인 학습을 위한 기법인 드롭아웃 같은 기능을 추가해본다. 다음 포스팅에서는 지금까지는 Fully Connected Layer 로만 구성된 DNN 딥러닝 모델을 구현했지만, 더 복잡한 모델인 CNN, RNN의 계층도 구현해볼 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 신경망 만들기(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 드디어 우리가 흔히 아는 오픈소스 딥러닝 프레임워크, 예를 들어 Tensorflow, Pytorch, Chainer를 사용하면서 접했던 API 형태로 Dezero를 추상화시켜볼 예정이다. 매개변수를 한데 모아주는 계층, Linear 계층같은 것들도 한데 모아주는 계층, 더 나아가 Optimizer, Dataset, DataLoader 까지 만들어볼 예정이다. 아마 딥러닝 프레임워크를 많이 사용해본 분들이라면 해당 이름의 API들이 어떤..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 신경망 만들기(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 이번 포스팅에서는 드디어 Dezero 프레임워크를 활용해서 신경망을 만들 수 있도록 기능을 추가할 예정이다. 신경망을 만들기 위해서는 추가적으로 다양한 함수의 기능들이 추가되어야 하는데 이번에는 이러한 함수들을 추가하는 포스팅이 주요 내용이 될 예정이다. 또한 이전까지는 우리가 만들어온 Dezero는 주로 입력이 스칼라인 형태를 다루어왔지만, 현실에서 가장 빈번하게 다루어지는 텐서의 입력 형태도 처리될 수 있도록 확장할 예정이다. 1. 우리가 만들어온 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 고차 미분 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅에서는 고차 미분 계산을 수학적으로 어떻게 구현해낼 수 있는지, 또 미분을 사용하는 이유는 목적함수를 최적화하는 것인데, 최적화 하는 방법론으로서 경사 하강법(Gradient Descent)과 뉴턴 방법(Newton's Method)의 개념이 무엇이고 차이점이 무엇인지도 알아보았다. 이번 포스팅에서는 뉴턴 방법 최적화 기법의 근간이 되는 고차 미분을 우리의 Dezero 프레임워크에 어떻게 녹여낼지에 대해서 배워보도록 하자. 그리고 고차미분이 ..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 고차 미분 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 우리가 만들어온 Dezero라는 프레임워크가 미분 계산을 자동화할 수 있어 역전파 시 미분 계산을 자연스레 할 수 있도록 만들었다. 하지만 더 어려운 작업을 자동화시켜야 해야 하는데, 그 작업이 바로 고차 미분 계산이다. 고차 미분이란, 1차 미분에서 미분을 $N$번 더 수행하는 2차 미분, 3차 미분, ... 을 의미한다. 이렇게 고차 미분을 수행해야 하는 이유는 함수를 최적화하는 것과 관련이 있다. 함수 최적화가 필요한 이유는 뭘까?..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 복잡한 미분 자동 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 해서 일직선의 계산 그래프 형태만이 아닌 더 복잡한 계산 그래프 형태도 자동미분할 수 있도록 여러가지 클래스들을 개선했었다. 하지만 직전까지 만든 코드들에 대해서도 개선사항들이 존재한다. 먼저 메모리를 절약할 수 있다는 점과 변수 사용성 개선, 연산자 오버로드 등이 있다. 그러면 이제 하나씩 개선시켜보도록 하자. 그 첫번째 내용으로는 메모리를 관리하는 것이다. 1. Python은 메모리를 어떻게 관리하고 있을까? 먼저 해당 목차에서 소개..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 더 복잡한 미분 자동 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅까지 걸쳐서 순수하게 Python, Numpy 만을 활용해서 미분을 자동으로 계산하는 방법에 대해 알아보고 코드로 구현까지 했다. 하지만 지금까지 배운 방법은 약간의 제약성이 존재한다. 바로 입력 또는 출력 변수가 여러개가 되는 경우에는 대응하지를 못한다. 이번 포스팅에서는 가변적인 길이의 입력, 출력 변수에도 대응이 가능하고 더 나아가 일직선 계산 그래프 형태가 아닌 분기, 결합이 추가된 복잡한 계산 그래프 형태에 대해서도 미분을 자동적으로..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 미분 자동 계산(2) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 저번 포스팅에서는 나만의 딥러닝 프레임워크를 만드는 첫 단계로서 수치 미분을 통해 미분을 자동으로 계산하는 방법에 대해 알아보았다. 하지만 앞서 배운 수치 미분이라는 방법은 계산 비용과 정확도 측면에서 단점이 존재한다. 그래서 이에 대한 대안책으로 오차역전파라는 방법이 등장한다. 오차역전파를 이용하면 미분 계산도 효율적으로 빠르게 할 수 있으며 결과값의 오차도 작아진다. 책에서는 역전파 이론에 대해서도 어느 정도 분량을 담아 기술하고 역전파 구현하는 단..
[밑시딥] 나만의 딥러닝 프레임워크 만들기, 미분 자동 계산(1) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 3권을 개인적으로 공부하면서 배운 내용을 기록하고 해당 책을 공부하시는 다른 분들에게 조금이나마 도움이 되고자 하는 목적 하에 작성된 포스팅입니다. 포스팅 내용의 모든 근거는 책의 내용에 기반하였음을 알립니다. 최근에 밑바닥부터 시작하는 딥러닝 1,2권을 깊숙하게 공부해보면서 부끄럽지만 나의 부족한 실력을 많이 채워나갈 수 있었다. 그리고 이번에는 실력을 좀 더 발전시키기 위해 해당 책 시리즈 3권을 천천히, 최대한 깊숙하게 공부해 보기로 결심했다. 참고로 3권도 마찬가지로 시중에 공개된 딥러닝 프레임워크인 Tensorflow, Pytorch 등과 같은 라이브러리를 사용해서 공부하는 내용은 아니다. 1,2권처럼 순수하게 파이썬과 넘파이만을 활용하게 되는데, 이..
[밑시딥] Transformer 동작과정을 밑바닥부터 뜯어보자! 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권 책에 나오진 않지만 책의 개념을 기반해 작성함을 알립니다. 또한 Transformer의 동작과정을 자세하게 이해하는 데 큰 참조 자료가 된 원본 블로그 출처는 여기임을 알립니다. - 아래 그림 자료에서 '아다마르 곱'을 사용해도 된다고 나와있지만 오타임을 알립니다! 행렬 내적(Matmul 또는 dot)을 수행해주어야 합니다! 저번 포스팅에서는 Transformer 라는 모델이 등장하게 된 이유과 모델의 큰 구조를 그림으로 살펴면서 각 구성요소가 어떠한 역할을 했는지도 알아보았다. 아쉬웠던 점은 트랜스포머라는 모델이 $key, query, value$라는 것을 입력으로 받는다고 했는데, 구체적으로 이 입력들이 무엇을 의미하는지, 그리고 트..
[밑시딥] RNN의 역할도 어텐션으로 대체한 seq2seq 모델, Transformer 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용의 마지막 챕터인 Transformer에 대해 간단히 소개하는 개념과 더불어 Transformer 논문인 "Attention Is All You Need"를 읽고 개인적으로 요약 및 정리한 글임을 알립니다. 본격 내용에 들어가기에 앞서 앞으로 Transformer(트랜스포머)에 대한 내용을 2개의 포스팅으로 나누어 게시하려고 한다. 첫 번째인 이번 포스팅에서는 트랜스포머 모델 논문에 기반하여 트랜스포머 모델이 나오게 된 이유를 알아보고 개괄적인 모델 구조를 그림으로 살펴보면서 어떤 기법이 들어가있는지에 대해 집중적으로 다룬다. 그리고 다음 포스팅에서는 트랜스포머 모델의 '진짜' 구조를 그야말로 밑바닥부터 파헤쳐보도록 하자. 1. 거추장스러운 R..
[밑시딥] 어텐션을 적용한 seq2seq을 한층 더 응용해보자 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅까지 해서 seq2seq 모델을 '크게' 개선하는 기법으로 어텐션(Attention)을 적용한 seq2seq 모델에 대해 알아보았다. 이번 포스팅은 밑시딥 2권의 마지막 포스팅으로 어텐션을 적용한 seq2seq 모델을 좀 더 응용할 수 있는 몇 가지 방법에 대해 알아보려고 한다. 1. Encoder의 RNN 계열 모델을 양방향(Bidire..
[밑시딥] seq2seq를 더 강력하게, 어텐션(Attention)을 적용한 seq2seq 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅에서는 2개의 RNN을 이어 붙힌 seq2seq 모델에 대해 배웠다. seq2seq 모델은 각각 RNN으로 이루어져있는 Encoder, Decoder로 구성되어 있다는 것과 각 역할에 대해서도 알아보았다. 그리고 이 seq2seq 모델의 성능을 개선하는 2가지의 '작은' 기법으로서 입력 시퀀스(출발어)를 반전시켜 Encoder에 넣는 기법..