논문명: Very Deep Convolutional Networks for Large-Scale Image Recognition 논문저자: Karen Simonyan & Andrew Zisseman 1. 개요: 이논문은 제목 그대로이다. '깊은' 합성곱 신경망이 얕고 '고급진' 신경망과의 비교를 주로 삼았다고 생각하면 된다. 2. 실험 개요: 전체적인 실험의 조건은 다음과 같았다. 1. 활성화 함수로는 ReLU를 사용 2. 출력 함수로는 Softmax를 사용 3. 224*224 크기의 컬러 이미지를 사용 4. 완전 연결 계층 3개를 사용 본 실험은 위의 표에서 보다 싶이 A~E까지의 경우로 나누어서 실험을 진행했다. A부터 E는 각 11개~19개의 층을 가지며 완전연결 계층을 제외할 경우 각 8~16개의 합성곱 층을 가지게 된다. 그럼 각각의 경우를 확인해보겠다. A: 가장 얕은 신경망으로 3*3필터가 적용된 층이 총 8개가 존재하며 특이사항은 없다. A-LRN: 전체적인 구성은 동일하지만 LRN, 즉 정규화를 적용하였다. B: A와 비슷하지만 3*3층이 2개 더 추가되었다. C: B에 3개의 층이 추가되었는데 이때 추가된 층의 필터는 3*3이 아닌 1*1필터이다. D: C와 비슷하지만 추가된 층의 필터가 3*3이다. E: D에 3*3필터를 3개를 추가하였다. 그리고 각 경우의 변수는 다음과 같다. 특징으로는 B,C,D를 확인할 수 있는데 B,C는 층이 3개나 차이나지만 변수의 숫자는 크게 차이가 없고 반대로 C,D는 층의 갯수는 동일하지만 변수의 숫자가 차이나는 것을 볼 수 있다. 3. 실험 진행: 실험은 다음과 같이 진행되었다. 1. 확률적 경사하강법을 이용 2. 무작위로 Shift 진행 3. 등방적으로 리스케일링 되기도 함(Q라는 변수) 3.1 Scale Jittering이라는 이름으로 사용됨 4. 다중 GPU를 통한 병렬적 처리 4. 실험 결과...
공부하다보면 트리를 서치하는 여러가지 방법이 나온다. 여기서는 두명의 플레이어가 게임을 한다고 가정하고 이야기를 진행해 보겠다. 1. 개요 만일 당신이 누군가와 체스를 두고 있다. 당신은 지금 폰을 움직여 상대 비숍을 잡을 수도 있고 룩을 움직여 상대 폰을 잡을 수도 있다. 이런 상황이면 대부분의 사람들은 폰을 움직여 비숍을 잡으려 할 것이다. 왜냐하면 그게 자신의 차례에서 최대의 이득이 되니까이다. 하지만 폰을 움직이게 되면 본인의 퀸이 잡힌다면? 그러면 그런 수는 두지 않을 것이다. 오늘 설명하려는 알고리즘도 이와 같다. 자신의 차례에는 자신의 이득을 최대한으로 하려고 하고 이와 마찬가지로 상대 역시 상대 편에는 나의 이득을 최대한 줄이는 방법을 선택하려고 할 것이다. 그중 첫번째로 볼 것은 min-max tree sreach이다. 2. min-max tree sreach 일단 기본적인 min-max의 알고리즘을 확인해보겠다. 트리는 다음과 같이 4,6,7,9,1,2,0,1,8,1,9,2의 말단 노드를 가지고 있다. 이때 min-max의 경우 처음은 본인의 차례로 생각하면 된다 그럼 각 말단 노드에서 비교하여 가장 큰 것을 확인해 선택하게 된다.(본인 차례에서는 최대의 이득을 얻는 것이 목표이므로) 따라서 그 다음 노드는 4 - 6 => 6, 7 - 9 => 9 .....etc로 만들어 진다. 그리고 여기서 이제는 상대편으로 넘어가게 되는데 상대편은 상대 자신의 이득을 높이고 싶어하지 나의 이득을 높이고 싶어하지는 않는다. 즉 상대는 선택할 수 있는 값 중 최소의 선택을 하려 할 것이다. 따라서 방금 올라온 6과 9 중에서 상대는 6을 선택하게 될 것이다. 이런 식으로 모든 노드를 탐색, 비교하게 되면 결국은 8이 내가 선택할 수 있는 최선의 값이 되게 된다. 이게 min-max의 방식이다. 본 방식은 구현이 매우 간단하다는 장점이 있지만 큰 문제점이 ...
1. 기존 포스트 정리 1.1 국립국어원에서 내려받은 말뭉치가 Json 형태로 구성되어있어 따로 접근을 시도했다. 1.2 따로 학습을 시도하기보다는 라벨링 하나하나를 위해 데이터와 라벨링을 한번에 학습했다. 1.3 데이터 전처리는 케라스에서 제공하는 모듈들을 이용했다. 2.데이터 전처리 tokenizerr.fit_on_texts(topics) topic_train = tokenizerr.texts_to_sequences(topics) tokenizerr.fit_on_texts(newtext) textdata_train = tokenizerr.texts_to_sequences(newtext) fit_on_texts와 texts_to_sequences는 단어를 하나의 정수와 연결해 딥러닝에 사용될 수 있도록 해준다. 여기서는 각 말뭉치를 형태소 분석기로 분해한 본문과 주제를 하나하나의 정수와 매칭시켰고 확인 결과 약 1000개의 단어 종류를 확인할 수 있었다. textdata_train = pad_sequences(textdata_train , maxlen = 170 ) topic_train = pad_sequences(topic_train , maxlen = 1 ) 여기서는 전체 길이를 맞춤과 동시에 빈자리를 Null 채우지 않기 위해 Padding하는 작업이다. 작업하는 방법으로는 pad_sequences를 이용하였다. maxlen는 기존의 본문을 분석한 결과 약 150~170단어 사이로 하나의 본문이 이루워져 있었고 따라서 최대 길이를 170으로 맞추어 Padding했다. 토픽(주제)은 하나의 정수로 이루어져 있었기에 1로 맞추었다. 3.모델 구현 model = Sequential() model.add(Embedding( 1000 , 128 )) model.add(LSTM( 128 )) model.add(Dense( 10 , activation = 'softmax' )) 일단 모델의 임베딩 레이어의 크기를 설정했다 임...
댓글
댓글 쓰기