티스토리 뷰
만약 이전과 같이 당신이 만든 고양이 감별기의 학습 데이터로써 10000개 정도의 유저가 업로드한 이미지를 포함하고 있다고 가정하자. 이 데이터는 별도로 분리된 개발/테스트 데이터와 같이 같은 분포를 띄고 있으며, 잘 동작하는 여부를 결정하는 분포를 나타내고 있다. 추가로 인터넷으로부터 다운로드받은 20000개 이미지가 있다. 그러면 알고리즘에 대한 학습 데이터로 20000+10000=30000개의 이미지를 모두 사용해야 할까, 아니면 알고리즘에 외부 영향을 주는 것을 막기 위해 20000개의 인터넷 이미지는 배제하는 것이 좋을까?
(간단한 linear classifier로 구성된, 손으로 직접 만든 영상 처리와 같은) 초창기에 나왔던 학습 알고리즘을 쓸 때에는 이렇게 다른 데이터를 합쳐서 사용할 경우 잘 못 동작할 위험이 존재했었다. 그래서 몇몇 개발자들은 위와 같이 20000개의 인터넷에서 받은 이미지를 포함하는 것을 꺼려할 것이다.
하지만 신경망과 같이 강력하고 유연한 학습 알고리즘이 나온 지금에는 이런 위험이 급격히 사라졌다. 만약 충분히 많은 hidden unit/layers로 구성된 신경망을 구성할 능력이 된다. 학습데이터에 20000개의 이미지를 더해도 괜찮다. 이렇게 이미지를 추가하면 성능을 향상시킬 수 있다.
이런 결과는 x->y와 같이 매핑하는 결과가 양쪽 데이터에도 잘 적용하는 케이스가 있다는 사실을 시사한다. 다른 말로 표현하자면 인터넷 이미지나 모바일 앱 이미지를 둘다 받을 수 있는 머신러닝 시스템이 존재하며, 이미지에 대한 출처에 대한 정보 없이도 라벨을 예측할 수 있다는 것을 의미한다.
20000개의 이미지를 추가하는 것은 다음과 같은 효과를 보여준다:
1. 위와 같이 하면 신경망에게 어떤 이미지가 고양이이고 고양이가 아닌지에 대한 정보를 더 줄 수 있다. 보통은 인터넷 이미지와 유저가 업로드한 모바일 이미지가 어느정도 유사성을 공유하기 때문에 도움이 된다. 신경망은 인터넷 이미지로부터 얻은 약간의 지식을 모바일 앱 이미지에 적용해볼 수 있다.
2. 위와 같이 하면 신경망이 기존에 (고해상도나 프레임이 분포된 정도와 같은) 인터넷 이미지에 특화된 몇몇 특성들을 학습하는 능력을 확장시킬 수 있게 된다. 만약 이런 특성들이 모바일 이미지와 확연하게 다르다면, 신경망의 몇몇 기능을 "활용" 할 수 있을 것이다. 모바일 앱 이미지가 가진 분포로부터 데이터를 인식시키는데는 한계가 존재하는데, 이 부분은 우리가 정말로 관심있게 바라봐야 하는 부분이기도 하다. 사실 위와 같이 하면 알고리즘 성능이 안 좋아진다.
두번째 효과에 대해서 다르게 표현하자면, 가상의 인물인 홈즈가 마치 사람의 뇌는 집의 다락방과 같다고 한 것과 같다. 이 말은 즉 공간도 어느 정도 정해진 양이 있다는 것이다. 그는 "지식을 계속 습득하는 동안 기존에 알고 있었던 뭔가를 까먹게 된다. 그렇기 때문에 중요한 정보를 손실시킬 수 있는 유용하지 않은 정보는 가지지 않는 것이 가장 중요한 부분 중 하나다" 라고 말했다. 1
운이 좋게도 마치 큰 다락방과 같이 충분히 큰 신경망을 만들수 있는 연산적인 능력을 갖고 있다면 이건 그렇게 신경 쓸 부분이 아니다. 기존에 가지고 있던 성능으로 인해 두가지 형식 데이터들이 충돌나는 것 없이도, 인터넷으로부터 다운로드 받은 이미지나 모바일 앱 이미지를 학습시키는데 활용할 수 있다. 알고리즘의 "핵심"은 충분히 크기 때문에 공간이 부족한 것에 대해서는 것정할 필요가 없다.
하지만 만약 충분히 큰 신경망(혹은 매우 유연한 학습 알고리즘)을 가지고 있지 않다면, 학습 데이터를 활용할 개발/테스트 데이터의 분포에 맞추는 것에 신경을 써야 한다.
만약 사용할 데이터들로 인해서 얻을 수 있는 이점이 없다고 생각된다면, 연산적인 고려 측면에서 해당 데이터는 빼버려야 한다. 예를 들어, 사용할 개발/테스트 데이터가 사람이나, 장소, 건축물, 동물과 같이 간단한 사진을 주로 포함하고 있다고 하자. 그리고 아래와 같이 스캔된 형태의 역사 기록물도 많이 가지고 있다고 가정해보자.
위와 같은 문서는 고양이를 재조합하는 데에 대한 아무 정보도 포함하고 있지 않다. 또한 당신이 가지고 있는 개발/테스트 데이터의 분포와는 전혀 다르다. 해당 데이터를 거짓인 데이터로 활용할만한 부분도 없는데, 그 이유는 앞에서 언급한 첫번째 효과로부터 얻을 수 있는 이점이 보이지 않기 때문이다. 즉 신경망이 이 데이터로부터 개발/테스트 데이터 분포에 적용할만한 부분을 배울게 없다는 것이다. 그런 데이터를 추가하는 것 자체는 연산 리소스와 신경망이 가진 상징적인 기능을 낭비하는 꼴이 될 수 있다.
< 해당 포스트는 Andrew Ng의 Machine Learning Yearning 중 chapter 37. How to decide whether to use all your data을 번역한 내용입니다.>
- 코난 도일이 쓴 Scarlet에서 언급되었다. [본문으로]
'Study > AI' 카테고리의 다른 글
[MLY] 학습 데이터부터 개발 데이터까지 일반화하는 방법 (0) | 2018.10.03 |
---|---|
[MLY] 데이터에 가중치 부여하기 (0) | 2018.10.03 |
[MLY] 모순된 데이터를 넣을지 여부를 결정하는 방법 (0) | 2018.10.03 |
[MLY] 각각 다른 분포상에서 train과 test를 해야 되는 경우 (0) | 2018.10.01 |
[MLY] 인간 성능을 극복하는 것 (0) | 2018.09.30 |
[MLY] 인간의 성능 지표를 정의하는 방법 (0) | 2018.09.30 |
[MLY] 인간이 했을 때의 성능과 비교해야 하는 이유 (0) | 2018.09.27 |
- Total
- Today
- Yesterday
- DepthStream
- 파이썬
- Offline RL
- dynamic programming
- ai
- Windows Phone 7
- PowerPoint
- Kinect SDK
- 딥러닝
- Expression Blend 4
- Off-policy
- ColorStream
- Policy Gradient
- End-To-End
- bias
- reward
- Pipeline
- processing
- SketchFlow
- Gan
- Kinect for windows
- RL
- arduino
- TensorFlow Lite
- 강화학습
- Variance
- Kinect
- windows 8
- 한빛미디어
- Distribution
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |