1편에 이어서 2편에서는 Linear layer, Query, Key, Value 개념 그리고 multi-head self-attention 동작에 대해 살펴보고자 한다.
2022년 9월 28일 수요일
트랜스포머는 어떻게 동작할까? – 2편
트랜스포머는 어떻게 동작할까? – 1편
이번 호에서는 지난 10 년간 머신러닝 분야에서의 가장 큰 진보 중 하나로 꼽을 수 있는, 그 중에서도 특히 자연어처리 분야로부터 시작되어 비전을 포함하여 다른 분야에까지 커다란 파장을 미친 트랜스포머(Transformers)에 대해 다룰까 한다. 2017년 “Attention is all you need”라는 논문이 구글 브레인에서 발표되면서 소개된 Transformers 모델은 다수의 자연어처리 성능 최고 기록을 갈아치우며 당대의 SOTA(State of the Art)로 당당히 이름을 올렸다. 전통적으로 순차적 문제들을 해결해왔던 RNN, GRU, LSTM 등을 훨씬 뛰어넘어 독자들도 한번쯤 들어봤을BERT, GPT-3 같은 거대 언어모델의 근간이 된 기술. 트랜스포머는 현재 머신 러닝 분야에서 맹위를 떨치고 있는 기술임에는 틀림없다. 트랜스포머는 어떻게 동작할까?
전통적 sequence 모델의 한계
Self Attention
Transformers 모델 구조
Inputs
Input Embedding
Positional Embedding
Multi-head self-attention
2022년 8월 3일 수요일
신경망 기반 추천시스템은 어떻게 동작할까? -2편
전 처리 (정규화 및 분할)
신경망 추천시스템에 결합되는 정보들
Train 과 Test에 feature 와 context 부가정보 추가
상품 및 사용자 특성이 반영된 심층망 기반 모델 설계
결언
신경망 기반 추천시스템은 어떻게 동작할까? -1편
영화 추천 시스템
상품 및 사용자 특성이 반영된 신경망 협업필터링 추천 시스템
왜 심층신경망 기반인가?
확률적 경사 하강법을 통한 행렬 분해
자 그럼, 우리가 살펴보려고 하는 문제를 생각해보자. Matrix factorization(MF, 행렬인수분해)는 추천 시스템에서 사용되는 협업 필터링(CF, Collaborative Filtering)중 대표적인 알고리즘이다. Matrix factorization 알고리즘은 아래 그림3과 같이 사용자-상품 간 상호작용 행렬을 두개의 저차원의 정사각형 행렬로 분해해 작동하게 표시된다. 우선 데이터로부터 ④와 같은 사용자-상품(영화)의 행렬을 만든다. 실제로는 ④의 노란색 셀과 같은 곳에만 값을 알 수 있고 나머지 값들을 모른다. 신경망을 통해 입력되면 ①의 사용자-특성 과 ②의 상품별-특성의 정사각형 행렬로 분해된다.데이터 로드 및 products feature engineering
Users feature engineering
데이터 정제
Products-Features matrix
Users-Products matrix
2022년 4월 27일 수요일
라벨 없는 영상 데이터 들로부터 딥러닝을 통해 유사 이미지 탐색해오기 – 2편
1편에 이어서 3중 손실을 통한 훈련 시행, 이미지 검색을 위한 특징 추출, 유사 이미지 검색 모듈에 대해서 살펴보겠다
3중 손실함수(triplet loss)
실제 프로젝트에서 딥러닝을 통한 이미지 분류를 처리하고자 할 때, 라벨이 부여된 수천 건의 데이터를 준비하는 문제 혹은 분류되는 이미지 종류(class)가 너무 많은 (안면인식과 같은) 경우에 봉착하는 경우가 많다. 2015년 구글에서 발표한 안면인식 FaceNet 논문 에서 컨볼루션 네트워크에서 안면 이미지와 유사 이미지, 그리고 다른 이미지의 3중 손실로 훈련하는 방법이 발표되면서 훈련에 zero shot learning 과 같은 비지도학습 가능성이 소개되었다.
<그림 1. Triplet loss 함수>
Loss는 아래 그림2의 ①과 같이 Siamese 네트워크의 출력인 ap_distance 와 an_distance 의 차이로 표시된다. ②와 같이 margin 을 두고 0.0 중에 최대치를 취하게 함으로써 음수 값을
갖지 않도록 한다.
<그림 2. 손실 산출>
3중 손실을 통한 훈련 시행
3중 손실을 통한 훈련 시행은 아래 그림 3과
같이 옵티마이저는 Adam을 채용하고 learning_rate는
0.0001, 그리고 epoch를 40으로 하였을 때, validated loss 가 ①과 같이0.0374로 나타났다.
<그림 3. 훈련 시행>
이미지 검색을 위한 특징 추출
컨볼루션 심층망을 통과하여
feature vector 가 생성된 layer를 임베딩(embedding)이라고 칭한다면 비교하고자 하는 모든 이미지들이 이러한 같은(동일한
파라미터 조건하의) 컨볼루션 망을 통과하면 결국 같은 길이의 임베딩으로 이루어질 것이다. 만약 이러한 임베딩들을 고차원의 벡터 공간에 위치시킨다면 같은 구조를 가진 임베딩끼리는 같은 위치에 모일 것이고
다른 구조를 가진 임베딩끼리는 멀리 떨어지게 된다. 우리는 자연어처리에서 word2vec 묘사들을 PCA를 통해 2차원에 투영했을 때 이러한 묘사를 볼 수 있다.
이전 1편 그림 7에서 정의한 embedding
layer를 참고로 다시 보자. 아래 그림 4의 ①과 같이 layer.trainable 상태를 출력해본다. ② 이전 그림에서 설정한데로
154번째 layer 부터 trainable 이 True 로 변경 되어있음을 확인할 수 있다.
<그림 4. layer.trainable 확인>
아래 그림 5와 같이 훈련된 siamese
모델로부터 특징 추출 모델을 생성한다. 3중 손실을 통한 훈련을 통해 생성된 Siamese 모델의 입력으로 embedding input이 output은 embeddig,out 즉 그림 4에서 살펴본 256차원의 output
이다.
Feature vector 추출
<그림 6. Feature vector 추출>
이 feature vector 추출
함수를 이용하여 비교할 대상인 전체 anchor 이미지들을 대상으로 한 데이터프레임 df 를 작성한다. 데이터프레임은 ‘file’과
‘features’를 컬럼으로 하며 각 row 당 df[‘features’]에 feature vector가 담기도록 만든다.
유사도 함수
<그림 7. 코사인 유사도>
함수로 정의된 코드는 아래 그림 8과 같다.
<그림 8. 유사도
함수>
유사 이미지 검색 모듈
유사 이미지 검색 모듈은 아래 그림 9에서 찾고자 하는 입력 이미지 파일인 file, 유사한 이미지를 전체
anchor 이미지들의 feature vector 가 담긴
데이터프레임 feature_df, 그리고 feature_model 과
model_name 을 매개 변수로 전달하여 ①에서 feature
vector를 img_features 로 추출하고, ②에서
getCosineSimilarity함수에 img_features와
비교할 numpy array 의 row[‘features’]를
행방향 원소들로 더해서(axis=1) featu_df[‘similarity’] 컬럼에 저장한다. ③에서 ‘similarity’ 컬럼을 내림차순으로 정렬. ④에서 유사도 순서로 5개의 파일을 출력하는 plotSimilarImages를 호출한다.
<그림 9. 유사
이미지 검색 및 출력>
이때 비교할 test
이미지도 순서대로 정렬하여 test_images_path 밑에 위치시킨 test_images 파일로 준비한다. 이러한 test_images로
anchor 이미지 중에 62.jpg 파일을 선택해서 test_images_path 밑에 위치시키고, 아래 그림 10과 같이 실행시키면 이미지 유사도 순서로 5개의 이미지가 출력된다.
아래 그림 10의
①에서 test_images에 여러 파일이 있다면 아래 그림과 같은 6개
이미지 블록이 그 수 만큼 표시된다. ②유사이미지 검색 모듈 호출, ③은
test_image 파일, ④는 기존 anchor 이미지들에도 62.jpg 가 있기 때문에 유사도 1.000 로 동일 파일이 나타난다.
<그림 10. 유사
이미지 출력>
결언