전체 글 34

LSTM(Long Short-Term Memory)과 GRU(Gate Recurrent Unit)

안녕하세요! 오늘은 바닐라 RNN의 장기 의존성 문제를 보완한 RNN 모델인 LSTM과 GRU에 대해 알아보겠습니다. 1. LSTM 1-1. 삭제 게이트 1-2. 입력 게이트 1-3. 셀 상태 (장기 상태) 1-4. 출력 게이트와 은닉 상태 (단기 상태) 2. GRU 1. LSTM LSTM은 은닉층의 메모리 셀에 삭제 게이트, 입력 게이트, 출력 게이트를 추가하여 필요하지 않은 기억은 지우고, 기억해야 할 정보를 저장합니다. LSTM은 바닐라 RNN에 비해 은닉 상태를 계산하는 식이 더 복잡해졌으며 셀 상태라는 값을 추가했습니다. 아래의 그림에서 t시점의 셀 상태를 C(t)로 표현하고 있습니다. LSTM은 RNN과 비교하여 긴 시퀀스의 입력을 처리하는데 뛰어납니다. LSTM의 전체적인 흐름은 다음과 같습..

딥러닝 2021.08.21

딥 러닝의 가장 기본적인 시퀀스 모델 RNN (Recurrent Neural Network)

안녕하세요! 오늘은 자연어 처리에서 많이 쓰이는 딥 러닝의 가장 기본적인 시퀀스 모델인 RNN에 대해 알아보겠습니다. 1. RNN이란? 2. RNN의 학습 3. 바닐라 RNN의 한계 1. RNN이란? RNN이란 Recurrent Neural Network의 약자로, 순환 신경망을 뜻합니다. RNN은 입력과 출력을 시퀀스 단위로 처리합니다. 시퀀스란 문장 같은 단어가 나열된 것을 뜻합니다. 이러한 시퀀스들을 처리하기 위해 고안된 모델을 시퀀스 모델이라 하며, 그중에서 RNN은 딥 러닝의 가장 기본적인 시퀀스 모델입니다. RNN의 은닉층에서 활성화 함수를 통해 결과를 내보내는 역할을 하는 노드를 셀이라고 합니다. 이 셀은 이전의 값을 기억하려고 하는 일종의 메모리 역할을 수해하므로 메모리 셀이라고 부릅니다...

딥러닝 2021.08.19

영상과 이미지 인식 분야에 탁월한 CNN (Convolutional Neural Network)

안녕하세요! 오늘은 딥러닝의 합성곱 신경망인 CNN에 대해서 알아보겠습니다. 1. CNN이란? 2. 합성곱 층 (Convolutional Layer) 3. 풀링 (pooling) 4. CNN의 전체 구조 및 과정 1. CNN이란? CNN이란 Convolutional Neural Network의 약자로, 기존의 Deep Neural Network에서 이미지나 영상과 같은 데이터를 처리할 때 생기는 문제점들을 보완한 방법입니다. 기존의 DNN은 고해상도의 이미지를 처리할 때 입력 뉴런의 수가 급격하게 증가하게 되고 파라미터의 수도 급격하게 늘어납니다. 그림을 보면 16x16 이미지를 기존의 DNN으로 학습할 경우 28326개의 파라미터를 학습해야 합니다. 또한, DNN의 경우 기본적으로 1차원 형태의 입력 ..

딥러닝 2021.08.16

기울기 소실과 폭주 (Gradient Vanishing & Exploding)

안녕하세요! 오늘은 기울기 소실과 폭주 문제에 대해 알아보겠습니다. 1. 기울기 소실과 폭주의 문제점과 발생 이유 2. 기울기 소실과 폭주를 완화하는 방법 2-1. 수렴하지 않는 활성화 함수 사용 2-2. 그래디언트 클리핑 (Gradient Clipping) 2-3. 가중치 초기화 2-4. 배치 정규화 1. 기울기 소실과 폭주의 문제점과 발생 이유 깊은 인공 신경망을 학습하다 보면 역전파 과정에서 초기 부분의 입력층으로 갈수록 기울기가 점차적으로 작아지는 현상이 발생할 수 있습니다. 이를 기울기 소실이라고 합니다. 반대의 경우로, 기울기가 점차 커지면서 가중치들이 비정상적으로 크게 업데이트 되기도 합니다. 이를 기울기 폭주라고 합니다. 이렇게 말로만 보면 잘 이해가 되지 않으니 그림을 보며 자세하게 알아..

딥러닝 2021.08.12

[Python] BFS(Breadth First Search) 알고리즘

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 탐색 알고리즘 중 하나인 BFS 알고리즘에 대해 알아보겠습니다. BFS란 'Breadth First Search'의 약자로 너비 우선 탐색이라고 불리며, 그래프에서 가까운 부분을 먼저 탐색하는 알고리즘입니다. BFS 알고리즘은 주로 최단거리를 구할 때 사용합니다. BFS 알고리즘을 이해하기 위해서는 큐 구조와 그래프의 구조에 대해 알아야 합니다. 그래프에 대해서는 이전 DFS 알고리즘 포스팅에서 설명드렸으니 넘어가고 큐 구조에 대해 설명드리겠습니다. 큐(Queue) 큐는 선입선출(First In First Out)의 구조입니다. 큐의 구조는 편의점에서 물품을 진열하는 방식과 같습..

벡터값인 임베딩에 어떻게 의미를 함축시킬 수 있을까?

*해당 포스팅은 한국어 임베딩(이기창 지음)을 공부하며 작성한 글입니다. 이전 포스팅에서 컴퓨터에 자연어를 이해시키기 위해 임베딩을 통해 벡터값을 생성해야 한다는 것을 알아봤습니다. 오늘은 그렇다면 이 벡터값에 자연어의 의미를 함축시키는 방법에 대해 알아보도록 하겠습니다. 그 방법은 자연어의 통계적 패턴 정보를 통째로 임베딩에 넣는 것입니다. 임베딩을 만들 때 쓰는 통계 정보는 크게 세 가지가 존재합니다. 어떤 단어가 많이 쓰이는지, 단어가 어떤 순서로 등장하는지, 문장에 어떤 단어가 같이 나타났는지와 관련한 정보입니다. 이제 이 세가지 통계 정보를 토대로 임베딩을 만드는 방법들에 대해 알아보겠습니다. 1. 어떤 단어가 많이 쓰이는가 1-1. 백오브워즈 1-2. TF-IDF 1-3. Deep Averag..

임베딩(Embedding)이 뭐지?

*해당 포스팅은 한국어 임베딩(이기창 지음)을 공부하며 작성한 글입니다. 안녕하세요! 오늘은 자연어 처리 분야의 임베딩의 기초적인 부분에 대해 알아보겠습니다. 임베딩을 공부하게 된 계기는 "우리가 일상생활에서 쓰는 자연어를 어떻게 컴퓨터가 이해할 수 있는지 궁금해서" 입니다. 한국어 임베딩(이기창 지음)이라는 책으로 임베딩 공부를 시작하게 되었고 앞으로 열심히 공부해서 임베딩에 대해 자세히 알아보겠습니다 : ) 1. 임베딩이란? 2. 임베딩의 역할 2-1. 단어/문장 간 관련도 계산 2-2. 의미적/문법적 정보 함축 2-3. 전이 학습 1. 임베딩이란? 임베딩이란 위와 같이 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 혹은 그 과정 전체를 의미합니다. 임베딩의 가장 간단한..

[Python] DFS(Depth First Search) 알고리즘

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 DFS 알고리즘에 대해 알아보겠습니다. DFS란 'Depth First Search'의 약자로 깊이 우선 탐색이라고 불리며, 그래프에서 깊은 부분을 먼저 탐색하는 알고리즘입니다. DFS 알고리즘은 주로 경우의 수에 대해 알고 싶을 때 사용합니다. DFS 알고리즘을 이해하기 위해서는 먼저 스택 구조와 그래프의 구조에 대해 알아야 합니다. 1. 스택 (Stack) 스택은 선입 후출(First In Last Out)의 구조입니다. 스택은 박스 쌓기에 비유해 볼 수 있습니다. 박스를 아래에서 위로 차곡차곡 쌓은 후에 박스를 치우기 위해서는 위에서부터 치워야 합니다. 그림으로 보면 다음과..

[Python] 그리디(Greedy) 알고리즘

*해당 포스팅은 이것이 코딩 테스트다 with python(나동빈 지음) 교재를 공부하며 작성한 글입니다. 안녕하세요! 오늘은 그리디 알고리즘에 대해 알아보겠습니다. 그리디 알고리즘이란 단어 그대로 탐욕법이라고 할 수 있습니다. 코딩에서 탐욕적이라는 말은 '현재 상황에서 지금 당장 좋은 것만 고르는 방법' 을 의미합니다. 그리디 알고리즘은 간단하고 유형이 다양하여 암기할 필요가 없지만 문제를 풀 때 창의력이 조금은 필요한 유형의 알고리즘입니다. 즉, 문제가 주어졌을 때 '어떠한 방식이 현재 상황에서 최선인가' 를 빨리 떠올리는게 중요합니다. 최단거리를 구하는 다익스트라 알고리즘의 같은 경우도 그리디 알고리즘에 해당하므로 그리디 알고리즘에 대해 잘 이해해 두는 것이 좋겠습니다. 물론 그리디 알고리즘이 모든..

High cardinality categorical feature에 효과적인 Mean target encoding

안녕하세요! 오늘은 데이터 인코딩 방법 중 Mean target 인코딩에 대해 알아보겠습니다. 카테고리형 피처가 매우 많은 종류의 카테고리를 가지고 있을 때 One-Hot 인코딩을 할 경우 새로운 컬럼이 너무 많이 생기게 되고 High Cardinality 피처를 모델에 너무 불균형하게 중요하게 만들어 Column Sampling 과정에 안 좋은 영향을 끼치게 됩니다. 그리고 보통 Feature Engineering 과정에서 피처들을 서로 결합해 새로운 피처를 생성하는데 이때, 새로운 High Cardinality 피처가 생성되게 됩니다. 그렇기 때문에 High Cardinality 카테고리형 피처를 숫자형으로 인코딩하기 위해 적합한 인코딩 방법이 필요하고 그것이 바로 Mean target 인코딩입니다...