목록전체 글 (55)
머신러닝에서 데이터가 가지는 중요한 특징에 대해 알아본다. For breakfast I ate _ eggs.라는 문장에서 빈칸에 들어갈 단어 중 적절한 단어를 분류해야 한다. 4 개의 알고리즘으로 실험했을 때 모두 다 데이터 셋이 많으면 많을 수록 성능이 향상되는 모습을 보여주었다. Large data set이 성능 향상에 도움이 된다는 이론적인 해석을 위해 feature x가 y를 예측하기 위해 충분한 정보를 담고 있다고 가정해보자. For breakfast I ate _ eggs.라는 문장에서 빈칸 주위에 여러 단어들이 feature가 되며 이를 보고 to, two, too 중 어떤 단어가 들어가야 하는지 선택할 수 있다. 이와 상반된 예시로 집값을 예측해야 하는 문제에서 고려할 수 있는 featur..
Skewed classes를 가지고 있는 data의 error metric에 대해 알아본다. 암을 진단하는 로지스틱 회귀 모델을 열심히 트레이닝해서 test set에 대해 평가를 해보니 error가 1%밖에 되지 않았다. 정확도가 99%가 나왔기 때문에 굉장히 좋은 모델인 것 같다. 그런데 test set을 확인해보니 전체 환자 중 진짜 암에 걸린 환자는 0.5%밖에 되지 않았다. 만약 모델이 모든 환자에 대해서 그냥 y=0이라고 결과를 낸다면 정확도는 99.5%가 된다. 왜냐하면 암에 걸리지 않은 환자가 99.5%나 있기 대문이다. 따라서 우리가 열심히 트레이닝한 모델보다 정확도가 더 높은 모델이 나온다. 정확도가 99.5%가 나오긴 했지만 모든 환자에 대해 y=0이라고 진단하는 모델은 좋은 모델이라고..
머신러닝 시스템을 설계하기 위해 어떻게 해야 하는지 알아본다. 스팸메일 분류 시스템을 만든다고 해보자. 왼쪽은 스팸메일이고 오른쪽은 스팸메일이 아니다. 스팸메일의 경우 의도적으로 단어의 철자를 제대로 사용하지 않는 것을 볼 수 있다. 이와 같이 이러한 메일 data set이 있고 스팸인지 아닌지에 대한 라벨링이 붙어있다고 하자 그러면 지도학습을 통해서 어떻게 스팸 분류 시스템을 만들어야 할까? 스팸메일 분류 시스템을 설계하기 위해서 해야 할 첫번째 순서는 이메일이라는 데이터에서 feature x를 정의하는 것이다. Feature x와 이에 대한 labeling y가 존재한다면 앞서 배웠던 로지스틱 회귀와 같은 방법을 사용해서 분류를 할 수 있을 것이다. 여기서 feature x는 이메일에서 존재할 수 있..
High bias, high variance 문제에 대해 알아본다. High bias와 high variance는 이전에 배웠던 것처럼 모델의 underfit, overfit 문제를 의미한다. 만약 사용하고자 하는 모델의 다항식 degree가 작다면 학습 데이터를 잘 맞추지 못 할 것이다. 이 문제는 High bias(underfit)문제가 된다. 반면에 상대적으로 큰 degree를 사용한다면 모델이 학습 데이터를 매우 잘 맞출 수 있지만 다른 test data는 잘 맞추지 못 할 것이다. 이 때의 문제는 High variance(overfit)문제가 된다. 따라서 둘 사이의 trade off로 적절한 모델을 찾는 것이 중요하다. Degree of polynomial D와 error 그래프를 통해 Hig..
케라스를 이용하여 ResNet50을 구현하였다.ResNet 50-layer 네트워크 구조는 다음과 같다. 그리고 레이어가 50개 이상인 버전에서는 오른쪽과 같은 bottleneck skip connection 구조를 사용한다. 케라스에서 제공하는 resnet50을 로드하여 세부적인 구조가 어떤지 파악한 뒤 똑같이 구현하는 걸 목표로 삼았다.네트워크에 존재하는 파라미터의 개수는 다음과 같다. 모델 구조를 보고 똑같이 짜보려고 했는데 conv layer에서 stride, padding과 같은 인자의 세부적인 값이 안 나와 있어서 이러한 값들을 출력 텐서의 사이즈를 보고 짐작하여 구조를 짜봤는데 나중에 구조를 출력하여 케라스의 resnet과 비교해보니 파라미터 수가 차이가 많이 났다. 레이어도 똑같이 쌓은 것..
효율적으로 머신러닝 알고리즘의 성능을 개선할 수 있는 테크닉에 대해 알아본다. 집 값을 예측하는 선형 회귀 시스템을 만들었다고 해보자. 그러나 test 시에 우리의 hypothesis가 잘 작동하지 않는다면 어떻게 해야 할까? 뭐 여러가지 방법들이 있을 것이다. Training data를 더 많이 모아보는 것, feature의 수를 줄여보는 것, 다른 feature를 추가해보는 것 등등 그런데 트레이닝 데이터를 열심히 모으는데 시간이 너무 많이 걸린다면? 만약 수개월이 걸려서 트레이닝 데이터를 모아서 다시 학습을 시켰는데도 성능이 개선되지 않는다면 이러한 과정은 분명 엄청난 시간을 낭비한 것이다. 대부분의 사람들은 직감에 따라 이런 저런 시도를 해보기 때문에 시간을 낭비하게 된다. 따라서 어떤 방법이 도..
뉴럴넷에서 Optimization을 사용하기 위해 파라미터를 벡터나 행렬로 사용하는 방법에 대해 알아본다. 뉴럴넷이 다음과 같을 때, 파라미터 θ 행렬을 하나의 큰 벡터에 담을 수 있다. (Gradient 행렬도 마찬가지) 기존의 θ 행렬은 하나로 만들었던 큰 벡터에서 reshape을 통해 추출할 수 있다. (θ 행렬이 3개 있고, 그림에서 히든 레이어가 1개밖에 없다. 히든 레이어가 2개가 되거나 파라미터 행렬이 2개만 있어야 되는 거 같은데 오타인지?) 위에서 정의한 방법을 사용하면 뉴럴넷 학습 알고리즘은 다음과 같이 요약할 수 있다. 파라미터 θ 행렬을 가지고 있는다. Optimization에 적용하기 위해 초기의 파라미터 θ 행렬을 하나의 큰 벡터로 펼쳐서 넣는다. 아래의 cost function..
뉴럴넷을 학습시키는 방법에 대해 알아본다. 이전에 배웠던 내용이지만, 만약 Binary classification 문제를 풀고자 한다면 마지막 레이어의 unit은 하나만 있으면 된다. 그리고 class의 수가 K인 분류 문제를 풀고자 한다면 마지막 레이어의 unit 수는 K개가 있으면 된다. 따라서 각 h(x)는 K차원의 벡터가 된다. 뉴럴넷의 Cost function을 정의하기 전 로지스틱 회귀에서 우리가 정의했던 cost function은 다음과 같다. 앞에서 Loss값을 구하고 뒤에서 Regularization을 이용하여 파라미터 θ의 값이 작아지도록 하면서 균형을 유지하도록 하였다. 뉴럴넷에서 h(x)가 K차원의 벡터이고 h(x)_i가 output 레이어의 i번째 unit이라고 할 때 cost f..