Introduction우선 3D 스캐너로 얻은 포인트 클라우드와 같은 기하학적 포인트 집합을 분석하는 것이 목표입니다. 이러한 데이터는 두 가지 중요한 특성을 가지고 있습니다. 첫째로 포인트들의 순서에 불변해야 하고, 둘째로 거리에 따른 지역적 특성이 다양하게 나타날 수 있습니다. 예를 들어 3D 스캔에서는 시점 효과나 움직임 등으로 인해 포인트의 밀도가 균일하지 않을 수 있습니다. 기존의 PointNet은 각 포인트의 공간적 인코딩을 학습하고 이를 전체적으로 통합하는 방식을 사용했지만, 거리에 기반한 지역적 구조를 포착하지는 못했습니다. CNN의 성공에서 볼 수 있듯이, 지역적 구조를 활용하는 것은 매우 중요합니다. 이러한 배경에서 PointNet++는 계층적 방식으로 포인트 집합을 처리합니다. 기본 ..
Introduce 딥러닝은 다양한 데이터에 대한 확률 분포를 나타내는 풍부하고 계층적인 모델을 발견할 수 있다는 가치를 가지고 있다. 하지만 딥러닝으로 생성모델을 발견하려고 하면 확률적 계산이 복잡하고 Relu의 장점을 살리지 못한다는 단점이 존재한다. 때문에 이 논문에서는 이러한 어려움을 우회하는 새로운 생성 모델 추정 절차인 GAN을 제안한다. GAN에 원리의 비유로 들 때 보편적으로 '위조지폐범과 경찰'의 관계를 예로 들곤 한다. 위조지폐범은 진짜지폐를 위조해 위조지폐를 만들고 경찰은 위조지폐를 감별해낸다. 그러면 위조지폐범은 더 진짜 같은 위조지폐를 만들어내도록 기술을 발전시키고 경찰은 위조지폐를 더 잘 찾아낼 수 있는 기술을 발전시킨다. 그러다가 경찰이 위조지폐를 감별해낼 확률이 반반이 된다면 ..
Introduce 객체인식에는 기계학습이 사용되며, 기계학습은 큰 데이터 셋, 강력한 모델, 과적합을 감소시킬 수 있는 기술이 필요하다. 이에 더해 객체 인식을 하기 위해서는 labeled image가 필요한데, labeled image는 각 이미지가 내용이나 특징을 나타내는 클래스와 관련된 식별자를 가지고 있는 이미지를 뜻한다. 하지만 labeled image는 상대적으로 적은 편이기 때문에 라벨을 보존, 변형, 보강함으로써 간단한 인식 작업이 가능할 정도로 데이터를 늘릴 수 있다. 예로 Mnist 숫자 인식 작업 오류율이 사람과 비슷한 0.3% 미만이 나오기도 하였다. 하지만 사실적 객체의 경우 변동성이 크기 때문에 더 많은 데이터 셋이 필요하다. 이러한 데이터 셋 부족 문제는 예전부터 거론되던 문제..
BERT는 transformer의 인코더 구조만을 사용하여 만든 bidirectional 모델이다. BERT 논문에서는 'Deep'이라는 글자를 강조했는데, 이는 기존의 language representation 모델들과 다르게 자신들의 모델 구조가 진정한 의미의 양방향 representation을 가능하게 했다는 것을 말하고자 한 것으로 보인다. BERT의 가장 큰 특징은 한번 Pre-training해 놓으면 모델 구조를 바꾸지 않고도 Fine-tuning 만으로 여러 NLP task에 적용할 수 있다는 것이다. 이처럼 개량 방식은 매우 간단하지만 여러 분야에서 SOTA를 달성할 만큼 우수한 모델임이 증명되었다. Introduction LM pretraining은 BERT 이전에도 다양한 NLP tas..
Introduction 초기 기계번역 모델은 Seq2Seq 아키텍처로 구현되었다. 이 모델은 입력 문장을 인코더로 압축하고, 그 결과를 디코더로 전달하여 번역을 생성하는 'encoder-decoder' 방식이었다. 그러나 이 방식은 인코더가 context vector라는 고정된 크기의 벡터에 모든 입력 정보를 담기 때문에 정보가 손실될 우려가 있었다. 뿐만 아니라 Seq2Seq와 같은 RNN 기반 모델들은 계산이 순차적으로 이루어져 병렬처리가 어려웠다. 하지만 논문에서 제안하는 Transformer 모델은 행렬곱 계산을 통해 Context vector을 순차적 계산 없이 한번에 생성할 수 있는 동시에, 정보 손실을 최소화하는 매커니즘을 가지고 있다. Seq2Seq 모델은 위 그림과 같이 인코더의 최종 결..
머신러닝에서 편향과 분산은 모델의 성능을 평가하고 최적화하는 데 중요한 역할을 한다. 편향은 모델의 예측값이 실제값과 얼마나 차이가 나는지를 나타내며, 분산은 예측값들이 얼마나 넓게 퍼져있는지를 보여준다. 이미지에서 볼 수 있듯이, 높은 편향과 낮은 분산을 가진 모델은 단순한 패턴을 보이며 데이터의 복잡성을 제대로 잡아내지 못해 과소적합 상태에 빠진다. 반면, 낮은 편향과 높은 분산을 가진 모델은 데이터의 노이즈까지 학습하여 과대적합 상태가 된다.좋은 모델을 만들기 위해서는 편향과 분산 사이의 균형을 찾는 것이 중요하다. 하지만 이 둘은 서로 상충관계에 있어, 하나를 개선하려고 하면 다른 하나가 악화되는 경향이 있다. 따라서 모델 개발자는 적절한 복잡도를 가진 모델을 설계하여 두 요소 사이의 최적점을..
앙상블(ensemble) 기법은 머신러닝에서 여러 모델을 결합하여 더 강력하고 안정적인 예측 모델을 만들기 위한 방법이다. 앙상블 기법에는 대표적으로 배깅(bagging), 부스팅(boosting), 스태킹(stacking) 방식이 있다. Bagging 배깅은 Bootstrap Aggregating의 약어로, 중복을 허용하는 샘플링을 통해 여러 개의 모델을 병렬적으로 학습하고 각 모델의 예측을 평균 또는 투표를 통해 결합하는 방식이다. 즉, 전체 데이터에서 데이터를 중복 선택하여 모델을 여러 개로 늘리는 것이다. 이를 통해 모델의 분산을 줄여 과적합을 방지하고, 안정적인 예측을 가능하게 한다. Boosting 부스팅은 단일 모델로는 성능이 낮은 약한 학습기들을 순차적으로 학습시켜, 이전 모델이 실패한 샘..
문제 https://www.acmicpc.net/problem/27970 27970번: OX O와 X로 이루어진 문자열이 주어진다. 모든 문자를 X로 만들 때까지 다음 연산을 반복할 때, 시행하는 연산의 횟수를 구하시오. 문자열의 가장 왼쪽에 있는 O를 X로 바꾸고, 그보다 왼쪽에 있는 X www.acmicpc.net 풀이 a = 10**9 + 7 s = input() arr = [1]*len(s) for i in range(1, len(s)): arr[i] = (arr[i-1]*2)%a count = 0 for i in range(len(s)): if s[i] == 'O': count = (count + arr[i])%a print(count) 처음에는 for문을 통해 일일이 count하도록 코드를 짰..
문제 https://www.acmicpc.net/problem/28014 28014번: 첨탑 밀어서 부수기 첫째 줄에 첨탑의 개수 $N$이 주어진다. $(1\leq N\leq 5\,000\,000)$ 둘째 줄에는 앞에서부터 차례대로 첨탑의 높이 $H_1, H_2, \cdots, H_n (1\leq H_i\leq 1\,000\,000)$ 이 주어진다. 입력으로 주어지는 모든 수는 정 www.acmicpc.net 풀이 #include using namespace std; int count = 0; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int n; int n1 = 0; int n2; cin >> n; for(int i = 0; i> n2; if(n..
문제 https://www.acmicpc.net/problem/26258 26258번: 다중 일차 함수 2차원 좌표 평면에 점 $N$개가 주어진다. $i$번째 점의 위치는 $(x_i, y_i)$이고, $1 \leq i \lt N$인 모든 $i$에 대하여 $x_i \lt x_{i+1}$을 만족하며, 점 $i$와 점 $i + 1$을 잇는 일차 함수가 그려진다. 각각 구간 www.acmicpc.net 풀이 #include using namespace std; int cor[100005][2]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); int N, Q; float x, y, k; cin >> N; for(int i = 0; i> x >> y; cor[i..