본문 바로가기

Deep Learning26

트랜스포머(Transformer) (4) - multi-head attention 4. 어텐션 (Attention) 첫번째 인코더 레이어에 입력 값이 들어오고 여러 개의 인코더 레이어 반복해서 거침 Multi-Head Attention 레이어 Reference https://www.youtube.com/watch?v=AA621UofTUA 이 글은 나동빈님의 'Transformer : Attention Is All You Need' 논문 리뷰 영상을 보고 정리한 글입니다. 2022. 6. 4.
트랜스포머(Transformer) (4) - 인코더와 디코더 인코더 (Encoder) 트랜스포머는 하나의 인코더 층이 총 두개의 서브 층으로 이루어짐 : 셀프어텐션, 피드포워드 신경망 1) 셀프어텐션 : multi-head self-attention 블록으로 셀프 어텐션을 병렬적으로 사용함 2) 피드포워드 신경망 : position-wise FFNN 블록으로 그냥 일반적인 피드 포워드 신경망임 self-attention : 인코더 파트에서 수행하는 어텐션 - 각각의 단어가 서로 어떤 연관성을 가지고 있는지 구하기 위해 사용 ex) I am a teacher : 문장을 구성하는 각각의 단어 I, am, a, teacher 에 대해서 각각의 단어끼리 attention score 을 구해서 서로 어떤 단어와 높은 연관성을 갖는지에 대한 정보를 학습시킴 어텐션을 통해 전.. 2022. 6. 4.
트랜스포머(Transformer) (3) - 구조, 동작원리, 포지셔널 인코딩(Positional Encoding), 어텐션(Attention) 트랜스포머의 구조 - Attention Is All You Need 트랜스포머는 어텐션 기법만 쓰기 때문에 RNN, CNN 은 전혀 사용하지 않음 - 그래도 기존의 seq2seq 의 인코더-디코더 구조는 유지 - 인코더에서 입력 시퀀스를 입력받고, 디코더에서 출력 시퀀스를 출력 그렇기 때문에 문장 안에 포함된 각각의 단어들의 순서에 대한 정보를 주기 어려움 문장내 각각 단어의 순서에 대한 정보를 알려주기 위해 positional encoding 사용 이러한 아키텍쳐는 BERT 와 같은 향상된 네트워크에서도 채택됨 어텐션 과정 한번만 사용하는 것이 아니라 여러 레이어를 거쳐서 반복하도록 만듦 인코더와 디코더 N 번 만큼 중첩되어 사용하도록 만듦. - 이전 seq2seq 구조에서는 인코더 / 디코더 하나에서.. 2022. 6. 4.
트랜스포머(Transformer) (2) - Attention 으로 seq2seq 문제 해결 이 글은 나동빈님의 'Transformer : Attention Is All You Need' 논문 리뷰 영상을 보고 정리한 글입니다. Seq2Seq 의 문제 : 하나의 문맥 벡터가 소스 문장의 모든 정보를 가지고 있어야 하므로 성능이 저하됨 해결 방안 : 그렇다면 매번 소스 문장에서의 출력 전부를 입력으로 받으면 어떨까? ==> 'Attention' 메커니즘 사용해 인코더의 모든 출력 참고 가능 매번 단어가 출력되어서 hidden state 가 나올 때마다 그냥 그 값들을 전부 출력 값으로써 별도의 배열(w)에 다 기록해놓음 각각의 단어를 거치면서 나오는 h1, h2, h3, h4 들을 다 저장. 출력 단어 생성할 때마다 이 소스 단어들(w)을 다 참고하겠다는 아이디어 각 단어들을 다 똑같이 그냥 참고.. 2022. 6. 3.
트랜스포머(Transformer) (1) - Seq2Seq 모델의 한계점 이 글은 나동빈님의 'Transformer : Attention Is All You Need' 논문 리뷰 영상을 보고 정리한 글입니다. 트랜스포머 (Transformer - Attention Is All You Need) '어텐션' 이라는 메커니즘을 전적으로 활용하는 아키텍쳐 많은 최신 자연어 처리 모델이 활용하고 있는 아키텍쳐 - 트랜스포머 제안 Transformer 의 메인 아이디어는 BERT, GPT 와 같은 최신 아키텍처에 채택되어 Google 번역기, 파파고 등에 활용되고 있음 딥러닝 기반의 기계 번역 발전 과정 2021년 기준 최신 고성능 모델들은 트랜스포머 아키텍쳐를 기반으로 하고 있음 GPT : 트랜스포머의 '디코더(decoder)' 아키텍처 활용 BERT : 트랜스포머의 '인코더(enco.. 2022. 6. 2.
신경망 출력층 설계하기 (분류, 회귀에 맞는 활성화 함수 선정) 출력층 설계하기 신경망은 분류와 회귀 모두에 이용가능 기계학습 문제는 분류(classification)와 회귀(regression)로 나뉨 분류 : 데이터가 어떤 클래스에 속하느냐의 문제 ex) 사진 속 인물의 성별 분류 문제 회귀 : 입력 데이터에서 (연속적인) 수치를 예측하는 문제 ex) 사진 속 인물의 몸무게(57.4kg?) 를 예측하는 문제 * '회귀' 의 기원 : 19세기 후반ㅡ 영국의 프랜시스 골턴 경이 사람과 완두콩을 대상으로 크기를 측정했는데, 관찰 결과 키가 큰 부모의 자식은 부모보다 작고, 작은 부모의 자식은 부모보다 큰, 즉 평균으로 회귀하는 경향이 있음을 알았음. - 그 사이에는 선형 관계가 있어 부모의 키로부터 자식의 키를 예측할 수 있고, 그 예측 결괏값이 연속적인 수치였음 어떤.. 2022. 5. 31.
넘파이(numpy)로 신경망 구현하기 최종 코드 넘파이로 신경망 구현 def init_network(): network = {} network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) network['b1'] = np.array([0.1, 0.2, 0.3]) network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) network['b2'] = np.array([0.1, 0.2]) network['W3'] = np.array([0.1, 0.3], [0.2, 0.4]]) network['b3'] = np.array([0.1, 0.2]) return network def forward(network, x): W1, W2, W3 = network['W.. 2022. 5. 31.
넘파이(numpy)로 신경망 구현하기 신경망에서의 행렬 곱 넘파이 행렬을 사용해 신경망 구현해보기 x1, x2 에서 y1, y2, y3 로 가는 간단한 신경망 구현 (편향과 활성화 함수 생략하고 가중치만 갖는) X, W, Y 형상 주의 (X와 W 의 대응하는 차원의 원소 수 일치해야 함) 간단한 신경망의 행렬 곱 구현 다차원 배열의 스칼라곱을 구해주는 np.dot 함수를 통해 이렇게 간단하게 결과 Y 계산 가능 Y 의 원소가 100개든 1000개든 한 번의 연산으로 계산 가능 만약 np.dot 이 없었으면 for 문 사용해서 계산해야 함 따라서 행렬의 곱으로 한꺼번에 계산해주는 이 기능은 신경망 구현에 있어서 핵심 3층 신경망 구현하기 (순방향 처리 구현) 입력부터 출력까지의 순방향 처리 구현해보기 신경망에서의 계산을 행렬 계산으로 정리할 .. 2022. 5. 31.
numpy를 이용한 다차원 배열 계산 - 신경망 효율적 구현 다차원 배열 다차원 배열도 일단 '숫자의 집합' 숫자가 한 줄로 있는 것부터 시작해서 직사각형, 3차원, 더 일반화하여 N차원으로 나열하는 모든 배열을 '다차원 배열' 이라고 함 넘파이로 작성한 1차원 배열 np.ndim(A) : 배열의 차원 수 확인 A.shape : 인스턴스 변수 shape 로 배열의 형상 확인하기 - "튜플 반환" 1차원 배열이라도 다차원 배열과의 형태 통일을 위해 튜플 형태인 (4, ) 로 반환 예를 들어 2차원 배열이면 (4, 3), 3차원 배열이면 (4, 3, 2) 형태로 반환됨 이 예시에서는, A 는 1차원 배열이고 원소 4개로 구성되어 있다는 것을 확인 가능 넘파이로 작성한 2차원 배열 B는 '3 x 2 배열' : 처음 차원에는 원소가 3개, 다음 차원에는 원소가 2개있다는.. 2022. 5. 31.
ReLU 함수 - 신경망에서 자주 사용하는 활성화 함수 ReLU (Rectified Linear Unit) 함수 신경망에서 시그모이드 함수를 오래 전부터 이용해왔으나, 사실 ReLU 를 더 많이 이용 ReLU 는 입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하면 0을 출력하는 함수 h(x) = x (x>0) , 0 (x 2022. 5. 31.