글

[논문리뷰] 4. 심층 CNN에 대하여

이미지
논문명:  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. 실험 결과...

[논문리뷰] 3. CNN에 대하여

이미지
논문명: Going Deeper with Convolutions 논문저자: Christian Szegedy 외 다수  개요: 전체적으로는 기존의 CNN뿐만 아니라 사실상 모든 기계학습에서 나타나는 문제점인 '층을 깊게하여 학습할 경우 생기는 문제'에 대해 해결책을 제시하면서도 성능을 향상시킨 그런 논문이다.   1. 기존 구조의 문제점 기존의 구조에서는 학습의 깊이를 더욱 깊게 하기 위해 층을 늘리는 방식으로 진행한다. 하지만 층을 늘릴수록 계산해야하는 파라미터의 개수가 기하급수적으로 늘어난다.  위의 예시 표와 같이 매우 간단한 148*148 형태의 input이 단 3개의 계층만 거쳐도 147584개의 파라미터가 필요하게 된다. 그럼 만일 더 큰 형태로 수많은 층을 구현한다고 하면 엄청난 수의 파라미터가 필요할 것이고 이는 CPU,GPU가 발달한 현재에서도 쉽지 않은 일이다.  또한 단순하게 심층 구조를 이용할 경우 위의 파라미터의 과한 갯수와 맞물려 오버피팅이 일어나기 쉽다는 특성을 가지고 있다.  그리고 본 논문에서는 이에 대한 해답으로 희소구조 + 완전 연결 계층의 사용을 언급한다. (희소구조란? 조밀한 구조의 반대로 실제로 사용되지 않는(무언가를 표현하지 않는 데이터가 대부분인)데이터가 많은 데이터 구조를 이야기 한다.  예시로 희소행렬은  0     0     1     0     5     0        0     0     0     0     0     0     0     0     0     0     0     1     0 ...

MongoDB와 VScode 이용한 드라이빙app 개발 일지 (2022.1.21)

 실제로 진행되는 창업 프로젝트이므로 소스 코드는 없습니다. 1. 개발 환경 구축  평소 jetbrain IDE만 쓰던 나는 VScode는 생각보다 낯설었다. 그래도 어쩌랴 빨리 적응해야지.. 하고 부랴부랴 설치 후 개발환경을 세팅하기 시작했다. 물론 수많은 error가 났지만 나에게는 든든한 stackoverflow와 Google이 있었기에 간신히 세팅을 완료하고 mongodb와 연결해 서버를 돌렸다. 2. 첫 미팅 첫 개발팀 미팅에서 현재까지 진행된(혹은 구현된) 정도를 보았고 앞으로 나가갈 방향을 소개하셨다. 생각보다 할일이 많았다. 내가 할 수 있을까 일단 기본적인 작업부터 시작했다. 3. 암호화 그리고 postman 분명 어렵지 않은 hash화를 맡아서 진행하는 중 이였다 하지만 단 한번도 써보지 않은  VScode와 지식이 0 인 app 개발이라는 2연타를 맞고 나는 그대로 그로기 상태가 되었다. 구글도 스택오버플로우도 소용이 없었다. 결국 천천히 다시 공부를 시작했고 모 학우의 조언을 받아 postman을 프로젝트와 연결해 시험 환경 구축에 완료했다.  4. 암호화 그리고 postman2 구축이 끝나니 실제 task는 생각보다 간단했다. bcrypt를 사용해 코드를 몇줄 넣고 postman으로 요청을 보내니 순식간에 끝났다. 그 후로 조금 손을 보고 몇가지 수정사항을 변경하기는 했지만 솔직히 하루가 채 안걸렸었다. 사실 진정한 적은 개발환경 구축이었던듯하다. 5. 다음 Task 다음 Task는 비밀번호 재설정이다. bcrypt를 이용했기 때문에 복호화는 안되고 비밀번호를 잊으면 재설정하는 방식으로 해야하는데 이를 구현하려면 sns api를 통한 인증번호 발신 + 인증번호 확인 후 token발행 + 비밀번호 재설정 구현 까지 3연타이다. 연구실을 나오면 이제 앞으로 이 Task에만 매달려야 할 것 같다.

[논문리뷰] 2.NIN 신경망 구조

이미지
논문명: Network In Network 논문저자: Min Lin 외 2명 개요  본 논문의 전체적인 내용은 CNN(합성곱 신경망)의 단점과 그것의 보완점을 제시한다. 1. 논문에서 제시된 기존 CNN 구조의 문제점 본 논문에서 제시된 기존 CNN 구조의 문제점은 크게 2가지이다. 첫째  컨볼루션(convolution) 레이어에서는 기존의 입력값을 특징 맵으로 변환하는 과정을 거친다. ㄷ이때 기존의 CNN구조에서는 선형적으로 변환을 진행한다. 선형적으로만 변환을 진행하면 당연히 비선형적 연산에 비해 정확도가 떨어 질 수 밖에 없다. 따라서 본 논문에서는 이를 보완하기 위한 방법으로 다증퍼셉트론(MLP)를 도입했다. 구조는 다음과 같다. 위와 같은 구조를 통해 기존의 선형 연산이였던 것을 비선형 연산을 통해 정확도를 높인것을 본 논문에서는 MLPconvolutional Layer 라고 칭하며 이 Layer들이 쌓여있는 것이 NIN(Network in Network)구조이다.  둘째  마지막 출력 부분(또는 레이어)에서 완전연결 계층의 문제점이다. 가장 큰 문제는 CNN자체가 입체적인 데이터를 다루는데 이런식으로 연결되면 입체적인 INPUT과 거리감이 생긴다는 것이고 다음으로는 완전연결 계층 그 자체의 문제인 Overfitting 문제가 있다. 따라서 본 논문에서는 Global Average Pooling 이라는 레이어를 사용했다.  간략히 설명하면 마지막 출력부분에서 완전연결 계층을 대신해 각각의 Classification에 사용될 category를 특성맵으로 만들고 전부 평균을 내어 softmax함수에 집어 넣어 출력하는 방식으로 진행했다. 구조를 보면 다음과 같다.  위에 보다 싶이 완전연결계층이 아닌 각각의 특성 맵을 만들어 이를 softmax함수에 넣는 것을 볼 수 있다. 이를 통해 좀 더 입력값에 건장해지고 더해서 오버피팅을 방지할수 있다는 장점이 있다.  총 구조  총 구조는 다음...

Mecab과 Keras를 이용한 뉴스 말뭉치 구분 모델 구현.2 (NLP)

 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' )) 일단 모델의 임베딩 레이어의 크기를 설정했다 임...

Mecab과 Keras를 이용한 뉴스 말뭉치 구분 모델 구현.1 (NLP)

이미지
AI의 지도학습에는 크게 두 가지가 있다. 바로 분류(Classification)와 회귀(Regression)이다. 간략하게 설명하자면 들어온 input 자료들을 일정 기준으로 나누는 건 분류 들어온 자료들을 통해 다음 데이터를 예측하는 방식을 회귀라고 생각하면 편하다. 그리고 이번 포스트에서는 뉴스 말뭉치(말 자료들)을 이용하여 뉴스가 어느 분류에 속하는지에 분류하는 모델을 구현해 보겠다.  모델의 구현에 들어가기 전 미리 알아두어야 할 것들을 먼저 소개하겠다. 1. LSTM, RNN에 대하여    https://soobarkbar.tistory.com/74 본 포스팅에서 사용할 것은 LSTM 모델이다. 기존의 신경망의 단점을 보완한 것이라고 생각하면 편하다. 위의 블로그를 방문해서 공부하는 것을 추천한다. 2. Mecab 우리말 형태소 분석기 (은전한닢) http://eunjeon.blogspot.com/ 은전한잎이라는 우리말 형태소 분석기다. konlpy 기반으로 제작되었다고 하며 형태소 단위로 분류하는 것이 가능하게 만들어 준다. 다양한 종류의 분석기 중 은전한잎을 사용하겠다. 설치방법, 파일등은 위 사이트를 이용하기 바란다. 3. 케라스 API https://keras.io/api/ 본 포스팅에서 사용될 API들이다. 미리 학습하면 포스팅을 이해하는데 큰 도움이 된다. 4. 자연어 처리  https://www.sas.com/ko_kr/insights/analytics/what-is-natural-language-processing-nlp.html 자연어 처리 (NLP)에 대한 내용이다.  본 모델의 이야기이기 때문에 기본적으로 알아야 하는 내용들이다. 5. 감성분류 예제 (추가학습)  https://wikidocs.net/44249 네이버 영화 리뷰를 긍정:1 부정:0 으로 라벨링한 데이터를 이용해 학습을 진행하고 구현하는 방법을 알려주는 블로그 포스트이다. 이번 포스트와 많은 차이가 있지만...

Quiz.1.1

이미지
 1. 선형성을 띄지 않는 함수가 없는 다중층 레이어 신경망은 선형적으로 표현 가능하다는 것을 증명하시오. HINT: n개의 레이어의 경우를 두고 생각, f(x) = ax+b의 형태로 두고 생각 (개인 풀이) 1.   f(x) = ax + b이다. 이때 n=2 즉 2개의 층으로 이루워졌다고 생각하면  f(f(x)) = a(ax+b)+b = a^2x+ab+b = a'x + b' (a'=a^2, b'= ab + b) 즉 값이 동일하지는 않지만 사실상 선형성을 띄는 식으로 표현이 가능하다.  이제 n일때의 경우를 보면  fn(x) = a*fn-1(x)+b가 된다. 즉 사실상 형태가 반복되는 동일한 상황이므로 증명된다. 2. 시그모이드함수를 미분하시오. HINT: sigmod = 1/(1+e^-x) (개인풀이) 2. 0*(1+e^-x) - 1*(-e^x) / (1+e^-x)^2 = e^x / (1+e^-x)^2 3. 많은 층을 사용할 경우 시그모이드함수에서 기울기 소실이 일어나는 이유는? (개인풀이) 3. 기울기 소실의 경우 시그모이드 함수의 특징 중 하나이다. 시그모이드 함수의 경우  일반적인 시그모이드 함수 시그모이드 함수의 미분 형태 위에 그래프에서 보이듯이 시그모이드 함수는 수렴한다. 값이 극단적으로 커져감에 따라 수렴하는데 가중치를 변경하는 방법에서 가중치를 미분한 값을 곱하는 형식에서 미분한 값이 점점 작아질 수 밖에 없다는 단점을 가지고 이것이 바로 기울기 소실이다. 3.2 하이퍼볼라탄젠트함수와 시그모이드 함수의 관계가 scaled,shifted 형태이고 위의 기울기 소실에서 하이퍼볼라탄젠트 함수가 더 유리한 이유를 설명하시오  (개인풀이) 3.2  기본적인 하이퍼볼라 탄젠트 함수 미분형태의 하이퍼볼라 탄젠트 함수 위에 보다싶이 하이퍼볼라 탄젠트 함수는 수렴하지 않으므로 기울기 소실이 덜하다 하지만 극단적인 값으로 가면 0으로 수렴하기 때문에 기울기 소실에서 자유로울 수는 없다...