파이토치 8

[Pytorch] 임베딩 (2) / GloVe임베딩 + CNN 을 활용한 뉴스 카테고리 분류기 구현

파이토치로 배우는 자연어처리 책을 참고하여 작성했습니다. 이전 포스팅에선 임베딩의 개념에 대해서 정리해보았다. 이번 포스팅에선 사전 훈련된 임베딩 GloVe와 CNN모델을 활용하여 뉴스 카테고리를 분류하는 모델을 구축하는 코드를 리뷰해보고자 한다. 코드리뷰는 참고한 책에서 추가 보충 설명을 달아놓고 이해를 높이기 위함이므로 전체 코드를 보고 싶다면 코드 원본 출처에서 보도록 하자. ▶ 분석 개요 분석에 사용할 데이터는 AG 뉴스 데이터 셋으로 2005년에 수집한 뉴스 기사 모음이다. 해당 분석에서는 네가지 범주로 균등하게 분할된 뉴스 기사 12만개에서 뉴스 제목을 대상으로 카테고리를 예측하는 분류모델을 만들었다. ▶ 분석 과정 분석과정은 다음 그림과 같다. - 우선 텍스트를 정수로 매핑하기 위해 voca..

자연어 처리를 위한 피드 포워드 신경망(1)/ 다층 퍼셉트론, 파이토치 구현

델립라오, 브라이언 맥머핸의 파이토치로 배우는 자연어처리 책을 참고하여 작성하였습니다. 참고 강의1, 참고 강의2 ▶ 다층 퍼셉트론이란? 이전 포스팅에 올렸던 퍼셉트론을 여러 층으로 쌓아올린 구조를 말한다. XOR 논리게이트와 같이 하나의 직선으로 데이터 포인트를 나눌 수 없는 경우 여러 개의 퍼셉트론을 사용해 논리게이트를 구현할 수 있었듯이 복잡한 패턴의 데이터를 학습하기 위해선 여러 개의 퍼셉트론을 쌓아 학습하는 과정이 필요하다. ▶ 다층 퍼셉트론의 구조 단층 퍼셉트론이 입력층 하나와 출력층 하나로 구성됐다면 다층퍼셉트론은 입력층과 출력층 사이에 은닉층이 추가된다. 은닉층은 경우에 따라 여러 개의 은닉층이 쌓일 수 도 있다. MLP의 학습과정은 다음과 같다. 1) 입력벡터가 들어오면 첫번째 Linea..

신경망의 기본 구성 요소(7)/ 과대적합과 L1, L2 규제

참고 사이트 참고 영상 ▶ 과대적합 심층 신경망은 때로 수백만 개의 파라미터를 가지고 있을 정도로 자유도가 매우 높아 대규모의 데이터 셋을 학습시킬 수 있다. 그러나 이런 특징이 학습데이터에 모델을 과대적합시켜 막상 테스트 데이터에선 성능을 발휘하지 못하는 현상이 발생할 수 있다. 과대 적합을 줄이기 위해선 그래프를 일반화시켜야한다, 그래프를 일반화 시킨다는 것은 데이터 포인트에 맞춰져 있던 그래프들의 기울기를 작게 만든다는 의미이기도 하다. 기울기를 작게 만들기 위해선 가중치를 줄이는 과정이 필요하다. 가중치가 너무 작아지면 과소적합이 발생할 수 있기 때문에 과대적합과 과소적합을 적절히 완충시킬 수 있는 값을 구하는 것이 중요하다. 이 과대적합 문제를 막기 위해 l1, l2규제, 드롭아웃 등의 규제 방..

신경망의 구성요소(5)/ 활성화 함수- 소프트맥스

파이토치로 배우는 자연어처리 책을 참고하여 작성하였습니다. 참고한 유튜브 ▶ 소프트 맥스란? 값을 예측하기 위해 신경망의 출력물들을 변환하기 위한 활성화 함수로 시그모이드 함수는 각 클래스에 대한 확률값을 구할 수 있다. 그러나 시그모이드는 각 클래스에 대한 확률값이므로 모든 확률값을 더하면 1보다 큰 값이 나온다. 반면 소프트맥스는 입력으로 들어간 모든 클래스에 대한 확률값을 도출하므로 도출된 모든 확률값을 더하면 1이 된다. 소프트 맥스의 공식은 다음과 같다. 각 출력값에 대해 모든 출력 값의 합으로 나눠 K개 클래스에 대한 이산 확률 분포를 만든다. 즉 0-1사이의 값을 가지고 출력의 합이 1이되는 분포를 가진다. 이는 분류 task 에서 유용하게 사용될 수 있으며 주로 범주형 크로스 엔트로피와 함..

신경망의 구성요소 (4)/ 활성화 함수- ReLU

▶ 렐루(Recified linear unit) 렐루는 최근에 등장한 신경망의 활성화 함수로 최근 딥러닝 혁신의 상당수를 가능케 해준 활성화함수이다. 시그모이드부터 탄젠트 함수까지 해결되지 않았던 기울기 소실문제를 해당 함수로 해결할 수 있었다. 공식을 먼저 알아보자. 이전 포스팅에서 보았던 함수와는 달리 엄청나게 간단한 공식이다. 해석하면 렐루 함수는 x가 음수면 0을, x가 양수이면 x값을 출력하는 함수이다. 따라서 ReLU함수는 y=x라는 직선 부분과 0 이하의 부분을 0으로 출력하는 부분으로 이뤄져있다. ▷ 구현 이렇게 간단한 공식인만큼 계산복잡도가 낮아져 깊은 신경망에서 학습속도를 개선시키는 효과가 있다. 시그모이드, 탄젠트함수와 마찬가지로 비선형 함수이고 음수에선 0, 양수에선 y=x값으로 전..

신경망의 기본 구성요소(3)/ 활성화 함수- 하이퍼볼릭 탄젠트

파이토치로 배우는 자연어처리 책과 참고하여 작성하였습니다. 참고블로그 ▶ 하이퍼볼릭 탄젠트 하이퍼볼릭 탄젠트 활성화 함수는 시그모이드 함수를 선형변환한 것으로 시그모이드의 단점(그래디언트 소실)을 보완해주는 활성화 함수이다. 다음은 탄젠트의 공식이다. 탄젠트 활성화 함수는 시그모이드 함수를 선형변환한 것으로 다음과 같이 증명할 수 있다. ▷ 구현 하이퍼볼릭 탄젠트 활성화 함수를 파이토치로 구현해보자. 위 그래프에서 볼 수 있다싶이 시그모이드 함수의 출력값이 0-1이었던 반면 탄젠트 함수의 출력값은 -1에서 1값을 갖는다. 즉 기울기가 양수와 음수 모두 나올 수 있기 때문에 시그모이드 함수보다 학습 효율성이 뛰어나다. -1에서 1에 y가 분포하고 있어 시그모이드 함수보다 그 범위가 넓어 출력값의 변화폭이 ..

신경망의 기본 구성요소(2)/ 활성화함수- 시그모이드

밑바닥부터 시작하는 딥러닝을 교재로 한 유튜브 강좌와 파이토치로 배우는 자연어처리 책을 참고하여 작성하였습니다. ▶ 활성화함수 활성화 함수는 신호가 전달되고 전달된 값이 일정 임계값을 넘길 때 다음 뉴런을 활성화 시킬 수 있도록 하는 함수이기 때문에 "활성화"함수로 불린다. 활성화 함수는 데이터가 학습이 가능하게(= 미분이 가능하게) 만들어주는 함수로 여러가지 함수가 존재한다. 해당 포스팅과 다음 포스팅들에선 여러 활성화 함수 중 sigmoid, hyperbolic tangent, Recified Linear unit(RELU), softmax함수에 대해 알아보고자한다. 이번 포스팅에선 sigmoid 함수에 대해 알아보자. ▶ 시그모이드 함수 시그모이드는 신경망 분야 초창기 부터 사용한 활성화 함수로 0..

신경망의 기본 구성요소 (1)/ 퍼셉트론과 논리게이트, 파이토치 구현

밑바닥부터 시작하는 딥러닝을 교재로 한 유튜브 강좌와 파이토치로 배우는 자연어처리 책을 참고하여 작성하였습니다. ▶ 퍼셉트론이란? 뉴런을 본떠 만든 가장 간단한 신경망으로 구성요소로 입력x, 출력y, 파라미터로는 가중치w와 절편b가 있다. 신경망의 기초가 되는 부분이기 때문에 해당 개념에 대해 짚고 넘어갈 필요가있다. 가중치와 절편은 데이터를 학습하면서 계속 업데이트 되는 파라미터들로, 가중치는 해당 입력값이 얼마나 중요한지를 나타내고 절편(=편향)은 임계값 역할을 하여 학습데이터와 가중치를 계산한 값이 해당 절편을 넘어야 하는 값이 된다. 따라서 편향이 높으면 높을 수록 입력값이 True가 되는 장벽이 더 높아진다고 할 수 있다. 아래 그림에서 편향은 -theta로 표현할 수 있다. 수학적으로 퍼셉트론..