목록전체 글 (55)
분류 문제를 풀기 위한 Logistic Regression 알고리즘에 대해 알아본다. 이메일이 스팸인지 아닌지, 온라인 거래 시 사기인지 아닌지, 종양이 악성인지 아닌지 등 0 또는 1처럼 둘 중 하나의 값을 가지는 변수 y를 예측하는 문제는 classification으로 푸는 문제이다. 우선은 binary classification만 다루도록 한다. 종양의 크기에 따라 이 종양이 악성인지 양성인지 분류하기 위한 data set이 있다. (여기선 양성은 0, 악성은 1을 의미함) 회귀문제를 풀기 위해 선형회귀 알고리즘을 사용했던 것처럼 일단 직선을 그어보자 즉 우리가 할 수 있는 건 가설 h(x)의 결과값이 0.5가 되는 지점에서 수직으로 경계선을 긋는 것이다. 그래서 그 지점보다 size가 작으면 양성..
이전에 pretrained model을 사용하되 conv layer는 프리징시키고 F.C layer만 업데이트 되도록 했더니 오버피팅이 심하게 나타났다.이번에도 사전학습된 모델을 불러오지만 conv layer도 학습이 가능하도록 수정하였다. (trainable 변수만 바꾸면 된다.)현재 파라미터들이 이미지넷 데이터셋에 최적화된 값으로 초기화되어 있으므로 다른 초기화 기법을 적용하지 않았다.F.C layer는 저번처럼 새로 이어 붙여서 학습이 가능하게 하였다. 다른 도메인이지만 이미 파라미터들이 feature를 잘 추출해내는 어떤 값으로 초기화되어 있다. 그렇다면 다른 도메인에서도 그 성능을 발휘할 수 있을까? 다시 말해, iteration을 조금만 하고도 빠르게 수렴할 수 있을까?이번에는 왠지 그럴 것 ..
특정 선형회귀 문제에서 최적의 파라미터 θ를 구하는 또 다른 알고리즘 Normal equation에 대해 알아본다. Gradient descent는 iteration을 여러 번 하여 최소값을 찾아 나가지만 Normal equation은 θ를 분석적으로 구하기 때문에 알고리즘을 반복할 필요 없이 한번에 최적값을 구할 수 있다. θ가 실수일 때, 우리는 미분을 통해 기울기가 0이 되는 지점이 cost가 최소가 되는 위치라는 걸 알 수 있다. 이와 반대로 θ가 실수가 아닌 n+1차원의 파라미터 벡터인 경우 편미분을 이용하여 각 파라미터 θ에 대해 미분을 하여 0이 되는 지점을 찾아나가면 cost function을 최소화 할 수 있다. 하지만 파라미터 벡터의 차원이 매우 큰 경우 미분을 통해 일일이 계산하면 계..
우리는 feature가 하나인 집 값 예측 문제를 다뤘다.실제로 집 값을 예측하기 위해선 여러 feature들을 고려해야 한다. 이제 feature가 여러 개인 문제를 다뤄보도록 한다. 집 값을 예측하기 위해 4개의 사이즈, 침실 수, 층 수, 지어진 기간 등의 여러 변수를 고려해보자 이러한 feature들을 x1, x2, x3, x4라는 notation을 사용하여 나타내며 예측을 해야 하는 price는 y로 둔다. Feature를 표기하는 notation에 대해 좀 더 살펴보면 N은 feature의 개수가 된다. 여기선 4개의 feature를 사용할 것이기 때문에 n=4가 된다. X의 위첨자를 사용한 x^(i)는 training sample 중에 i 번째 sample을 가리킨다는 뜻이다. 따라서 x^(..
Gradient descent는 비용함수 J의 최소값을 구하기 위한 머신러닝 알고리즘이다.이 알고리즘이 어떤 것인지 알아보자. θ0, θ1을 파라미터로 하는 비용함수 J를 생각해보자. 여기선 2개의 파라미터만 존재한다고 가정했지만 실제론 굉장히 많은 파라미터가 존재할 것이다. 비용함수 J가 다음과 같은 형태일 때 θ0, θ1이 빨간 언덕위의 한 지점에서 초기화되었다고 해보자이 지점에서 작은 보폭으로 언덕을 최대한 빠르게 내려가고자 할 때 어떤 방향으로 가는 게 가장 빠른 길일까? 일단 주위를 둘러보고 언덕을 내려가는 가장 빠른 길을 찾아 따라서 내려간다. 아래 지점으로 이동하였다. 다시 여기서 주위를 둘러보고 작은 보폭으로 가장 빠른 길을 찾아 내려간다. 이러한 방식으로 새로운 지점에서 다시 주위를 둘러..
blood cell dataset을 가지고 pre-trained vgg16 네트워크를 사용하여 classification을 해보았다.Imagenet으로 사전훈련된 vgg16의 F.C layer를 제외한 feature extraction부분의 레이어만 가져왔고 sequential model을 사용하여 새로운 classifier를 만들어 vgg에 연결하였다.학습이 진행되는 동안 기존 vgg의 weight값들은 변하지 않게 프리징시켰고 F.C layer만 학습되도록 만들었다. 나는 이제 트레이닝을 하기 전, 다음과 같은 부분을 고민해보았다. 이미지넷으로 트레이닝 된 네트워크를 사용해서, 한 번도 본 적 없는 데이터셋도 잘 분류할 수 있을까? feature extraction layer들이 blood cell이..
머신러닝을 할 때 아래 3가지 요소를 잘 정의해야 한다. Task: 내가 풀고자 하는 task는 무엇인가? Experience: 내가 가지고 있는 data는 무엇이고 이 data가 해당 task를 잘 설명하고 있는지, 충분한 data가 있는지 Performance measure: 머신러닝의 성능지표를 어떤 기준으로 두고 평가할 것인지 머신러닝의 학습 알고리즘은 크게 supervised learning과 unspervised learning 두가지로 나눌 수 있다. (그 외의 강화학습, 추천시스템 등이 있음.) Supervised Learning: 정확한 답이 있는 dataset을 주고 학습시키는 방법 - Classification: 이산적인 결과값을 예측할 수 있는 함수(모델)을 찾아 새로운 데이터에 대..
이 글을 쓰는 이유는 Keras를 통해 CNN을 직접 구현해보고 이미지 classification에서 자주 사용되는 데이터셋이 아닌 다른 데이터셋을 사용하여 classification을 해보는 것이 주 목적이다. 딥러닝 라이브러리를 통해 데이터셋을 바로 불러오는 게 아니라 직접 로컬 데이터를 불러와보고 전처리도 해보고 네트워크를 설계하고 하이퍼 파라미터를 조절해보며 겪게 될 시행착오를 남기고자 한다. 상대적으로 구조가 간단한 vgg16으로 시작하여 네트워크를 만들어보고 직접 트레이닝할 것이다. 이후 Imagenet dataset으로 pre-train된 네트워크와 비교해보고 다른 네트워크 역시 만들어볼 것이다. Dataset데이터셋은 캐글에 올라온 Blood cell dataset을 사용하였다. (문제시 ..