목록Python/DL (37)
오답노트
https://arxiv.org/pdf/1708.05031.pdf 서론 LG U+에서 주최한 AI Ground 경진대회에서 알게된 딥러닝 기반 추천시스템 알고리즘이다. 경진대회를 참가 했을 때는 추천 시스템에 대한 개념이 아예 없어서 제대로 해보지도 못하고 대회를 마무리 했는데, 어떤 계기로 인해 추천 시스템을 계속 공부하고 있다. 본론 기존 Matrix Factorization sij 를 유저 i와 유저j 의 관계로 봤을 때, s23(0.66) > s12(0.5) > s13(0.4)의 관계를 가지고 있다. 이를 기하학적으로 봤을 때, (b)처럼 p2와 p3이 가장 가깝고 p1과 p3이 가장 멀다. 선형적인 공간에서 u4과 같은 새로운 유저가 등장하면 문제가 발생한다. 유저 4와 다른 유저들과의 관계는 ..
Embedding Embedding은 sparse 벡터 데이터를 dense 벡터 데이터로 변환 하는 것을 의미한다. sparse 벡터 데이터는 One-Hot Encoding된 데이터인데, One-Hot Encoding은 데이터 마다 인덱스를 부여하고 데이터의 유니크 개수 만큼의 차원의 벡터에 해당 인덱스에 1을 입력하는 것이다. 위 그림에서 red는 [1,0,0], blue는 [0,1,0], green는 [0,0,1] 으로 표현 가능하다. dense 벡터 데이터는 sparse 벡터 데이터와 달리 0이 대부분 없는 데이터를 의미한다. sparse 벡터 데이터를 dense 벡터 데이터로 변환할 때 가중치 테이블을 사용해 변환하게 되는데, 역전파를 통해 이 가중치 테이블이 계속 업데이트 된다. Embeddin..
Negative Sampling 네거티브 샘플링은 다중 분류 문제에서 이진 분류 문제로 바꾸는 것에 초점을 준다. 다중 분류에서 이진 분류로 문제를 바꾸므로 임베딩 벡터 값을 업데이트 시킬 때, 원하는 벡터 값만 업데이트 한다. 이 과정에서 연산량이 크게 줄어든다. NLP에서의 Negative Sampling Skip-gram에서 Negative Sampling를 사용할 수 있다. Skip-gram은 주변 단어를 예측하기 위해 중심 단어를 활용하는 모델이다. 즉, Skip-gram은 중심 단어를 input으로 주변 단어들 중 1개를 맞추는 다중 분류 문제인 것이다. 하지만 Skip-gram에 Negative Sampling을 사용하여 이진 문제로 바꿀 수 있다. 위는 기존의 Skip-gram의 모델을 도..
전체 구조 지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있었다. 이를 완전연결(fully-connected)이라고 하며 완전히 연결된 계층을 Affine 계층이라는 이름으로 구현했다. CNN에서는 새로운 '합성곱 계층'과 '풀링 계층'이 추가된다. CNN의 계층은 'Conv-ReLU-(Pooling)' 흐름으로 연결된다. 주목할 또 다른 점은 출력에 가까운 층에서는 지금까지의 'Affine-ReLU' 구성을 사용할 수 있다는 것이다. 도 마지막 출력 계층에서는 'Affine-Softmax' 조합을 그대로 사용한다. 합성곱 계층 완전연결 계층의 문제점 완전연결 계층에서는 인접하는 계층의 뉴런이 모두 연결되고 출력의 수는 임의로 정할 수 있다. 완전연결 계층의 문제점은 '데이터의 형상이 무시'..
매개변수 갱신 신경망 학습의 목적은 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것이고 이는 곧 매개변수의 최적값을 찾는 문제이다. 이러한 문제를 푸는 것을 최적화라고 한다. 지금까지 최적의 매개변수 값을 찾는 단서로 매개변수의 기울기(미분)를 이용했다. 매개변수의 기울기를 구해, 기울어진 방향으로 매개변수 값을 갱신하는 일을 몇번이고 반복해서 점점 최적의 값에 다가갔다. 이것이 확률적 경사 하강법(SGD)이란 단순한 방법인데, 지금부터 SGD의 단점과 다른 최적화 기법을 알아보자. 모험가 이야기 가장 크게 기울어진 방향으로 가자는 것이 SGD의 전략이다. 이 일을 반복하면 언젠가 깊은 곳에 찾아갈 수 있을지 모른다. 학률적 경사 하강법(SGD) class SGD: def __init__(self..
수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다는게 단점이다. 이번엔 가중치 매개변수의 기울기를 효과적으로 계산하는 '오차역전파법(backpropagation)'을 배워보자. 오차역전파법을 제대로 이해하는 방법으로는 수식을 통한 것과 계산 그래프를 통한 것이 있다. 전자 쪽이 일반적인 방법으로, 특히 기계학습을 다루는 책 대부분은 수식을 중심으로 이야기를 전개한다. 하지만 계산 그래프를 사용하면 시각적으로 이해할 수 있다. 계산 그래프 계산 그래프는 계산 과정을 그래프로 나타낸것이다. 여기서 그래프는 복수의 노드와 엣지(노드 사이의 직선)로 표현된다. 계산 그래프로 풀다 계산 그래프는 계산 과정을 노드와 화살표로 표현한다. 노드는 원으로 표기하고 원 안에 연산 내용을 적는다. 또, 계산 ..
학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것이다. 신경망이 학습할 수 있도록 해주는 지표는 손실 함수다. 손실 함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표다. 데이터에서 학습한다 데이터 주도 학습 기계학습에서는 사람의 개입을 최소화하고 수집한 데이터로부터 패턴을 찾으려 시도한다. 데이터에서 특징을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있다. 여기서 말하는 특징은 입력 데이터에서 본질적인 데이터를 정확하게 추출할 수 있도록 설계된 변환기를 가리킨다. 하지만 문제에 적합한 특징을 쓰지 않으면 혹은 특징을 설계하지 않으면 좀 처럼 좋은 결과를 얻을 수 없다는 뜻이다. 신경망의 이점은 모든 문제를 같은 맥락에서 풀 수 있다. 세부..
퍼셉트론은 복잡한 함수도 표현할 수 있다. 하지만 가중치를 설정하는 작업 즉, 원하는 결과를 출력하도록 가중치 값을 적절히 정하는 작업은 여전히 사람이 수동으로 한다는 것이다. 그러나 신경망은 가충치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 성질이 있다. 퍼셉트론에서 신경망으로 신경망의 예 아래 그림은 신경망이다. 여기서 가장 왼쪽 줄은 입력층, 맨 오느쪽 줄은 출력층, 중간 줄은 은닉층이다. 은닉층의 뉴런은 입력층이나 출력층과 달리 사람 눈에는 보이지 않는다. 퍼셉트론 복습 퍼셉트론을 수식으로 나타 냈을때, b는 편향을 나타내는 매개변수고 뉴런이 얼마나 쉽게 활성화되느냐 제어한다. 한편, w1,w2는 각 신호의 가중치를 나타내는 매개변수로, 각 신호의 영향력을 제어한다. 위 그림은 퍼셉트론..
퍼셉트론이란 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력. 다만 퍼셉트론의 신호는 1 또는 0의 두 가지 값을 갖는다. 입력으로 2개의 신호를 받는 퍼셉트론이다. x1 과 x2 는 입력 신호 y는 출력 신호, w1,w2는 가중치다. 원을 뉴런 혹은 노드라고 부르고 입력 신호가 뉴런에 보내질 때, 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 임계값를 넘어 설 때만 1을 출력한다. 이를 뉴런이 활성화한다고 표현한다. 임계값은 θ(세타,theta)로 표현한다. 수직은 아래와 같다. 퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다. 즉 가중치가 클수록 해당 신호가 중요하다! 단순한 논리 회로 ..
koBERT https://github.com/SKTBrain/KoBERT GitHub - SKTBrain/KoBERT: Korean BERT pre-trained cased (KoBERT) Korean BERT pre-trained cased (KoBERT). Contribute to SKTBrain/KoBERT development by creating an account on GitHub. github.com 기존 BERT는 140개의 언어셋으로 학습된 모델이다. 하지만 한국어에 대한 성능 한계를 극복하고자 한국어 위키백과를 학습시킨 모델이 바로 koBERT이다. 본 포스트는 koBERT를 불러와 사용하는 방법을 요약했다. 코드의 원본은 아래와 같다. 코드 원본 naver_review_classif..