본문 바로가기

Data Science

(158)
[밑시딥] RNN을 사용한 문장 생성, 그리고 RNN을 이어 붙인 seq2seq(Encoder-Decoder) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅까지 해서 RNN에 게이트를 추가한 모델인 LSTM과 GRU에 대해 알아보았다. 또 이러한 RNN 계열 신경망을 활용해 다음에 나올 '단어'를 예측하는 언어 모델(LM, Language Model)의 성능을 개선하는 방법들에 대해서도 알아보았다. 이번 포스팅에서는 다음에 나올 '단어'만을 예측하는 것이 아닌 '문장'을 예측하는 언어 모델을..
[밑시딥] 게이트를 추가한 GRU와 RNN LM 성능 개선 방법 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅에서는 기본 RNN 모델에 게이트를 추가한 LSTM 모델에 대해 알아보았다. 이번 포스팅에서는 RNN에 게이트를 추가한 또 다른 모델인 GRU(Gated Recurrent Unit)에 대해 알아보자. 그리고 난 후, LSTM, GRU 등과 같은 게이트가 추가된 RNN 모델로 설계한 언어 모델(LM, Language Model)의 성능을 개..
[밑시딥] 게이트가 추가된 RNN, LSTM(Long-Short Term Memory) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅에서는 hidden state라고 불리는 '은닉 상태 벡터'라는 것을 활용해 과거의 기억을 유지하며 시계열(시퀀스) 데이터의 특징을 학습할 수 있었던 기본 RNN 신경망에 대해 알아보았다. 그리고 이 기본 RNN 신경망으로 다음에 나올 단어를 예측하는 언어 모델인 RNN LM(Language Model)을 구현해보기도 했다. 하지만 저번에..
[밑시딥] 과거의 기억을 그대로, 순환신경망(RNN) 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 이전 포스팅까지는 Feed-Forward Neural Network(FNN)에 대해서 다루었다. 단어의 분산을 표현하기 위해 학습시켰던 신경망 모델인 CBOW 모델, Skip-gram 모델 모두 하나의 은닉층으로 하는 FNN 신경망 모델이었다. 하지만 이 FNN 모델은 순서가 중요한 특성으로 여겨지는 시퀀스 데이터 즉, 시계열 데이터를 잘 다루지 못..
[밑시딥] Embedding 계층과 Negative Sampling으로 효율적인 word2vec 구현하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 지난 포스팅에서는 word2vec를 구현하기 위한 신경망 모델로 CBOW 모델과 Skip-gram 모델에 대해 알아보았다. 그리고 간단하게 한 문장의 말뭉치를 활용해서 신경망 모델을 학습시키고 학습된 신경망의 입력층 파라미터 즉, 우리가 구하고자 하는 단어의 분산 표현을 얻어보기도 했다.(이것이 word2vec를 구현한 셈!) 그런데 아직 개선할 문..
[밑시딥] 단어의 분산을 표현하는 또 다른 기법, word2vec 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 이번 포스팅에서는 단어의 분산을 표현하는 또 다른 방법으로 신경망을 사용하는 추론 기법인 word2vec에 대해 배워본다. word2vec를 구현하기 위한 신경망 모델의 종류 중 하나로 CBOW 모델에 대해 알아보고 이를 넘파이로 구현하는 방법도 알아보자. 1. 추론 기법의 등장 단어의 분산을 표현하는 또 다른 방법으로 추론 기법이 등장했다. 그런데..
[밑시딥] 오직! Numpy로 단어의 분산 표현하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 이번 포스팅에서는 자연어 처리의 가장 기본인 단어의 분산 표현에 대해 알아보고 이를 넘파이로 구현하는 방법에 대해 알아보자. 1. 단어의 의미를 표현하는 방법 최근에는 대부분 딥러닝으로 단어의 의미를 표현하지만 딥러닝이 등장하기 이전에도 단어의 의미를 표현하는 방법들이 존재했다. 단어의 의미를 표현하는 방법에는 크게 3가지 방법이 존재한다. 시소러스..
[밑시딥] 오직! Numpy로 구현했던 딥러닝 신경망 복습 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 2권의 교재 내용을 기반으로 자연어처리 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 자연어 처리의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 이번 포스팅부터는 밑바닥부터 시작하는 딥러닝 2권을 학습하면서 배운 내용을 기록해보려 한다. 2권은 주로 자연어 처리에 관련된 내용이다. 필자는 개인적으로 Weekly NLP를 통해서 자연어 처리에 입문했었는데, 그 때는 이론적인 측면에서 접근했다고 한다면 이번엔 이론을 더 깊게 파보면서 넘파이로 구현하는 과정까지 어떻게 신경망으로 자연어 처리를 할..
[밑시딥] 오직! Numpy로 학습관련 기술들 구현하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 1권의 교재 내용을 기반으로 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 딥러닝의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 이번 포스팅에서는 신경망 학습과 관련된 기술로서 파라미터를 갱신하는 최적화 기법, 파라미터 초기화 기법, 활성화 값들을 정규화시키는 배치 정규화 등의 방법들에 대해 이해해보고 넘파이로 구현해보려고 한다. A. 최적화 기법 저번 포스팅까지 우리는 오차역전파를 통해 파라미터의 기울기(변화량들)를 구하는 방법에 대해 알아보고 이를 넘파이로 구현하는 것까지 배워 보았다. ..
[밑시딥] 오직! Numpy로 오차역전파를 사용한 신경망 학습 구현하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 1권의 교재 내용을 기반으로 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 딥러닝의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅에서 행렬 곱을 연산하는 계층과 활성화 함수가 적용된 계층의 역전파 방법까지 알아보면서 신경망 학습의 오차역전파 방법을 모두 이해해보았다. 이번 포스팅에서는 그동안 배운 내용들을 기반으로 오직 넘파이를 활용한 오차역전파 신경망 학습을 구현해보자. 먼저 복습 차원에서 활성화 함수와 손실 함수를 넘파이로 구현하는 소스코드를 보고 가자. 1. 활성화 함수(Si..
[밑시딥] 오직! Numpy와 계산 그래프를 활용해 활성화 함수 계층 오차역전파 이해하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 1권의 교재 내용을 기반으로 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 딥러닝의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅에서 오차역전파 개념을 계산 그래프로 이해하고 간단한 곱셈, 덧셈 연산에 대한 오차역전파를 넘파이로 구현하는 방법에 대해 알아보았다. 이번 포스팅에서는 곱셈, 덧셈 연산을 넘어서서 나눗셈과 활성화 함수 연산에 대한 오차역전파가 어떻게 동작하는지 이해해보고 이를 넘파이로 구현하는 방법에 대해서도 알아보자. 신경망 모델은 덧셈, 곱셈 연산도 존재하지만 가장 ..
[밑시딥] 오직! Numpy와 계산 그래프를 활용해 오차역전파 이해하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 1권의 교재 내용을 기반으로 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 딥러닝의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 포스팅까지 파라미터의 기울기를 구하는 방법으로서 수치 미분이 무엇인지 알아보고 넘파이로 구현하는 방법에 대해서도 알아보았다. 그리고 그를 기반으로 신경망을 학습시키는 것도 구현해보았다. 그런데 수치미분을 활용해서 파라미터의 기울기를 구하는 방법은 단순한 계산이지만 시간이 오래걸린다는 단점이 존재했다. 왜냐하면 저번 포스팅의 소스코드를 살펴보면 알겠지만, 하나의..
[ML] Tensorflow Window Dataset 객체로 시계열 예측 구현하기 이번 포스팅에서는 Tensorflow 2.x 버전에서 제공하는 Window Dataset 객체로 시계열 순환신경망을 구현하는 방법에 대해 알아본다. 최근에 수요 예측 알고리즘 대회에 참가하면서 Tensorflow를 활용해 딥러닝으로 시계열 예측을 시도했는데, 구현하는 과정이 순조롭지 않았다. 레퍼런스 문서를 Tensorflow 공식 문서를 활용해 구현하려 했지만 개인적으로 이해하기가 매우 난해했다. 너무 작성자 위주로 작성되어 있다고 해야 할까? 그러던 중 유용한 유투브 강의를 참고하면서 tf.data.Dataset 객체를 활용해 시계열 Window 데이터셋을 만드는 데 성공했다. 그리고 시계열 데이터를 예측하는 데 있어서 문제에 따라 예측하는 유형이 매우 다양하다는 것을 느꼈다. 그래서 이번 기회에 알..
[밑시딥] 오직! Numpy와 수치 미분을 통해 신경망 학습시키기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 1권의 교재 내용을 기반으로 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 딥러닝의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 저번 시간까지 배웠던 Numpy로 신경망을 구성하는 방법과 이미 학습된 파라미터로 추론해보는 단계까지 해보았다. 이번 포스팅에서는 직접 넘파이로 설계한 신경망을 데이터를 통해 파라미터를 '학습'시키는 방법에 대해 알아보자. 먼저 학습시키는 방법을 알아보기 전에 손실함수라는 개념에 대해 알아야 한다. 손실함수는 일명 파라미터를 어떤 방향으로 학습시킬지 가이드라인을 제..
[밑시딥] 오직! Numpy로 간단한 신경망 구현하기 🔊 해당 포스팅은 밑바닥부터 시작하는 딥러닝 1권의 교재 내용을 기반으로 딥러닝 신경망을 Tensorflow, Pytorch와 같은 딥러닝 프레임워크를 사용하지 않고 순수한 Numpy로 구현하면서 딥러닝의 기초를 탄탄히 하고자 하는 목적 하에 게시되는 포스팅입니다. 내용은 주로 필자가 중요하다고 생각되는 내용 위주로 작성되었음을 알려드립니다. 이번 포스팅에서는 딥러닝 구현의 가장 기초라고 할 수 있는 것들에 대해 알아보려고 한다. 먼저 Numpy의 Element-wise product와 broadcasting에 대해 알아보자. 1. Element-wise product 와 Broadcasting 우선 Element-wise product는 배열의 동일한 위치의 원소들끼리 연산하는 것을 의미한다. 다음과 ..
[ML] Tensorflow로 Pretrained Model Fine Tuning 하기 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 이번 포스팅에서는 Tensorflow를 활용해 Pretrained Model을 로드하고 우리가 갖고 있는 데이터로 Pretrained Model을 추가로 학습시키는 Fine Tuning하는 방법에 대해 알아보자. 1. Fine Tuning 이란? 먼저 Fine Tuning에 대해 간단히 알아보자. Fine Tuning은 미리 수많은 데이터로 학습된 전이 학습 모델을 가져와서 우리 데이터를 추가로 학습시켜서 전이 학습..
[ML] Residual Block을 활용한 ResNet(Residual Network) 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 이번 포스팅에서는 Skip Connection 이라는 개념을 최초로 활용해서 Residual Block을 연속적으로 쌓아 매우 깊은 네트워크를 형성했음에도 불구하고 이전 CNN 분류 모델인 GoogleNet 보다 더 높은 성능을 이끈 ResNet에 대해 알아보고자 한다. 1. ResNet은 왜 등장했을까? 원초적인 질문으로 돌아가보자. 저번 포스팅에서 배운 GoogleNet도 성능이 나름 괜찮은 편이였는데, 왜 새로..
[ML] GoogleNet(InceptionNet) CNN 모델 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 이번 포스팅에서는 Pretrained 모델로 자주 사용되기도 하며 1 by 1 컨볼루션을 최초로 도입한 GoogleNet 모델에 대해 알아보려고 한다. GoogleNet은 Inception Network라고도 부르며 예전에 코세라 딥러닝 강의를 들으면서 배웠던 적이 있다. 강의를 들은지 시간이 좀 되었기도 하고 다시 회고하고 복습하고자 GoogleNet에 대해 작성하려 한다. GoogleNet은 이름에서도 알다시피 ..
[ML] Tensorflow.keras의 flow_from_directory, flow_from_dataframe 사용법 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 저번 포스팅에서는Tensorflow.keras의 ImageDataGenerator에 대해 배워보았다. ImageDataGenerator가 어떻게 이미지 데이터 소스로부터 데이터를 얻어와 이미지를 전처리 및 증강 기법을 적용하고 모델에 어떤 형태로 입력으로 넣어주는지에 대해 알아보았었다. 이번 포스팅에서는 그 단계 중에 ImageDataGenerator 객체를 생성한 후 Numpy Array Iterator로 생성 및..
[ML] Tensorflow.Keras로 ImageDataGenerator 사용해보기 🔊 해당 포스팅은 권철민님의 CNN Fundamental 완벽 가이드 강의를 듣고 난 후 배운 내용을 정리하고자 하는 목적 하에 작성되는 포스팅입니다. 하단의 포스팅에서 사용되는 실습 코드 및 자료는 필자가 직접 재구성한 자료이며 권철민님의 자료를 그대로 인용하지 않았음을 필히 알려드립니다. 최근에 텐서플로우로 CNN의 기초를 다시 정립하고자 해당 강의를 듣게 되었다. 그러던 중 몰랐다가 알게 된 내용을 정리해서 재구성하여 배운 내용에 대해 기록하고자 한다. 이번 포스팅에서는 이미지 데이터를 증강하는 기법 즉 , Data Augmentation을 지원하는 Tensorflow.keras의 ImageDataGenerator에 대해 알아보고 CIFAR10 이미지 데이터로 실습코드까지 적용해보고자 한다. 1. ..