요새야 대학교 프로그래밍 입문을 Python으로 많이 진행하고 있겠지만(몇몇 학교에서는 언어의 본질을 가르치는 취지에서 Lisp이나 Scheme같은 함수형 언어로 가르치기도 하지만...), 학교다닐때만 해도 가장 많이 가르치고 많이 써먹던 언어가 C와 Java가 아니었나 싶다. 물론 학부를 전자과로 해서 그런지 하드웨어를 다룰 일이 많아 C만 배우고 말았지만, 안드로이드가 돌아가는 기반이나 IT업계에서 널리 쓰이는 범위를 보면 Java의 영향력은 무시할 수 없다. 심지어 Python이 대세인 딥러닝 쪽에서도 최근 Java기반의 라이브러리인 Deeplearning4j(DL4J)가..
온라인 상품의 리뷰를 검사해주고, 해당 글 작성자가 상품에 대해서 좋아하는지 안 좋아하는지를 자동적으로 알려주는 시스템을 만들고 있다고 가정해보자. 예를 들어 다음 리뷰에 대해서는 아주 긍정적으로 인식되기를 원할 것이다:This is great mop!( 이건 훌륭한 걸레야! )그리고 다음 글에 대해서는 매우 부정적인 것으로 인식될 것이다.This mop is low quality--I regret buying it.(이 걸레는 질이 낮아서, 산 걸 후회한다.) 긍정적인 것과 부정적인 것을 인식하는데 있어 문제가 발생하는 것을 보통 "감정 분류(sentiment classification)"이라고 부른다. 이런 시스템을 만들기 위해서는 두 가지 구성요소로 이뤄진 하나의 "파이프라인"을 만들어야 한다. 1..
헬리콥터한테 복잡한 기동을 할 수 있도록 가르치는데 머신러닝을 활용한다고 가정해보자. 위의 사진은 시간대별로 컴퓨터가 조종하는 헬리콥터가 엔진이 꺼지면서 착륙하기까지의 사진을 나타내고 있다. 이런 방식을 "자동회전식(autorotation)" 기동이라고 부른다. 이를 통해 헬리콥터의 엔진이 뭔가 예측하지 못한 사유로 인해 고장날 지라도 헬리콥터가 착륙할 수 있게끔 해준다. 인간 조종사는 교육과정 중 일환으로 이런 기동을 연습한다. 이제 해야할 목표는 학습 알고리즘을 사용해서 헬리콥터의 안정적인 착륙을 위해 T 경로를 따라서 헬리콥터가 비행하는 것이다. 강화학습(reinforcement learning)을 적용하기 위해서는, 모든 가능한 경로 T에 대해서 얼마나 좋은지를 평가할 수 있는 "보상 함수(rew..
이런 경우에는 최적화 검증 테스트를 적용해볼 수 있다. 만약 주어진 입력 x에 대해서, 출력 y를 얼마나 잘 얻을 수 있는지 점수 Scorex(y)를 계산할 수 있을 수 있을 때 말이다. 더불어 argmaxyScorex(y)를 찾는 근사 알고리즘을 사용하는데 종종 최대치를 찾는데 실패하는 검색 알고리즘을 의심해볼 때도 사용해볼 수 있다. 이전 음성 인식 예제를 가져와보면 x=A는 음성 데이터 일 것이고, y=S는 출력 번역본일 것이다. y*가 "올바른" 출력인데, 알고리즘은 y_out 결과를 내뱉었다고 가정해보자. 그러면 이를 확인해볼 방법은 $$Score_{x}(y*) > Score_{x}(y_{out})$$여부를 확인하는 것이다. 만약 위의 수식이 참이라면, 최적화 알고리즘 문제로 판명할 것이다. 이..
음성 인식 시스템을 만들고 있다고 가정해보자. 해당 시스템은 음성 파일 A를 입력으로 넣어줘서 동작하고, 각 출력 문장 S에 대한 점수(Score_A(S))를 계산한다. 예를 들어 $$ Score_{A}(S) = P(S|A)$$ 를 계산할텐데, 이 값은 주어진 입력 음성이 A일 때 적절한 출력 문장으로 문장 S가 나올 확률을 나타내는 것이다. Score(S)를 계산하는 방법으로, 해당 값을 최대로 극대화할 수 있는 영어 문장 S를 찾아야 하고 수식으로는 다음과 같다. $$Output = arg \max_{S}Score_{A}(S)$$ 여기서 "argmax"는 어떻게 계산해야 할까? 만약 영어가 50000개의 단어로 구성되어 있다면, N개의 길이로 구성되어 있는 문장은 (50000)^N 정도가 된다.(약간..
다루고 있는 음성 인식 시스템이 차안에서 발생한 음성 데이터에 대해서 더 많이 필요로 한다. 운전중에 많은 데이터를 수집하는 것보다는 더 쉬운 방법이 있다. 바로 주어진 데이터를 인위적으로 합성하는 것이다. 만약 차 소음이나 거리 소음에 대한 음성 데이터를 많이 가지고 있다고 가정해보자. 몇몇 사이트에선 그 데이터를 다운로드 받을 수 있다. 그리고 조용방에서 사람들이 이야기하는 학습 데이터도 많이 가지고 있다고 가정해보자. 만약 사람이 대화하는 음성 데이터에다 차/거리 소음 데이터를 "추가"한다면, 시끄러운 차 안에서 사람이 대화하는 것에 대한 음성 데이터를 얻을 수 있을 것이다. 이런 과정을 사용해서 우리는 해당 데이터들을 마치 차안에서 얻은 데이터인 것처럼 "합성"(synthesize)시킬 수 있다...
음성 인식 시스템을 개발하고 있는데, 학습 데이터나 학습 개발 데이터 상에서는 잘 동작하는데, 개발 데이터 상에서는 잘 동작하지 않는다고 가정해보자. 그러면 데이터 불일치(data mismatch) 현상이 있는 것인데, 이 때 어떻게 해야 할까? 본인이 추천하는 방법은: 1) 학습 데이터와 개발 데이터 사이에 어떤 데이터 특성이 다른지를 이해할 것2) 알고리즘 상에서 문제가 발생하는 개발 데이터에 조금 더 적합한 학습 데이터를 조금 더 수집할 것 예를 들어, 음성 인식의 개발 데이터에서 오류 평가를 수행하고 있다고 가정해보자: 아마 처음에는 100개의 데이터에 대해서 일일이 평가를 수행할 것이고, 알고리즘이 어디서 문제가 생기는지를 이해하려고 할 것이다. 아마 개발 데이터에 포함되어 있는 대부분의 음성 ..
만약 고양이를 인식하는 작업에서 인간이 거의 완벽에 가까운 성능(0%대의 오류)를 보여줬고, 이상적인 오류율도 0%이다. 지금 상태에서 당신이 가지고 있는 지표가 다음과 같다고 가정해보자: - 학습 데이터 상에서의 1%의 오류 - 학습 개발 데이터 상에서의 5%의 오류 - 개발 데이터 상에서의 5%의 오류 이 결과가 무엇을 의미할까? 여기서는 high variance를 가지고 있는 것을 알 것이다. 앞에서 소개한 variance를 제거하는 방법을 사용하면, 성능이 좋아질 것이다. 이제 알고리즘이 다음의 지표를 가진다고 가정해보자: - 학습 데이터 상에서의 10%의 오류 - 학습 개발 데이터 상에서의 11% 오류 - 개발 데이터 상에서의 12% 오류이건 학습 데이터 상에 높은 avoidable bias가 ..
만약 학습 데이터와 개발/테스트 데이터의 분포가 다른 상태에서 머신러닝을 적용한다고 가정해보자. 앞에서 다룬대로 하면 학습 데이터는 인터넷 이미지와 모바일 이미지를 포함한 것이고, 개발/테스트 데이터는 모바일 이미지만 포함한 것이다. 하지만 알고리즘은 잘 동작하지 않을 텐데, 아마 생각한 것보다 개발/테스트 데이터 오류가 많이 발생해서 일 것이다. 이렇게 잘 못되는 몇가지 가능성들이 있다: 1. 학습 데이터 상에서는 잘 동작하지 않는다. 이 문제는 아마 학습 데이터 분포상의 high (avoidance) bias가 발생한 것이다. 2. 학습 데이터 상에서는 잘 동작하는데, 학습 데이터와 같은 분포로부터 나온 미지의 데이터 상에서는 일반화가 잘 되지 않는 현상이 있을 수 있다. 이 건 high varian..
만약 200000개의 이미지를 인터넷으로부터 받고, 5000개의 이미지를 모바일 앱 유저로부터 받았다고 가정해보자. 데이터 사이즈 비율은 40:1 정도가 된다. 이론적으로는 충분히 큰 신경망을 만들고 205000개의 이미지를 충분히 학습시켰다면, 인터넷 이미지와 모바일 이미지 상에서 잘 동작하는 알고리즘을 만드는데 지장이 없다. 그러나 실전에서 모바일 이미지보다 인터넷 이미지가 40배 정도 더 많은 것은 단순히 5000개의 이미지만을 가지고 학습하는 것에 비하여 두 모델을 학습하는데 있어 40배(나 그 이상의) 연산 리소스를 사용해야 하는 것을 의미한다. 만약 그걸 감당할 만큼 충분한 연산 리소스가 없다면, 인터넷 이미지의 비율을 타협할 수 있을 만큼 낮춰야 한다.예를 들어 최적화를 하는 데 있어서 sq..
만약 뉴욕시의 집 값을 예측하는 것을 학습시키고 싶다고 가정하자, 집의 크기(입력값 x)가 주어지면, 이를 바탕으로 집 가격(출력값 y)을 예측하길 원할 것이다. 뉴욕시의 집값은 매우 높다. 만약 미시건주의 디트로이트시의 집 값에 대한 정보를 가지고 있는데, 해당 집 값은 뉴욕시의 집값보다 더 낮다고 가정해보자. 이 데이터를 학습 데이터로 포함시킬 수 있을까? 같은 크기의 x가 주어졌을 때, 집 값 y는 해당 집이 뉴욕시에 있냐, 디트로이트시에 있냐에 따라서 매우 다르게 나올 수 있다. 만약 뉴욕시의 집값을 예측하는 것에 대해서만 신경써야 한다면, 위와 같이 두개의 데이터를 사용하게 되면 성능이 안 좋아질 것이다. 이런 경우에는 모순된 디트로이트시의 데이터는 빼버리는 것이 더 낫다. 위와 같은 뉴욕시와 ..
만약 이전과 같이 당신이 만든 고양이 감별기의 학습 데이터로써 10000개 정도의 유저가 업로드한 이미지를 포함하고 있다고 가정하자. 이 데이터는 별도로 분리된 개발/테스트 데이터와 같이 같은 분포를 띄고 있으며, 잘 동작하는 여부를 결정하는 분포를 나타내고 있다. 추가로 인터넷으로부터 다운로드받은 20000개 이미지가 있다. 그러면 알고리즘에 대한 학습 데이터로 20000+10000=30000개의 이미지를 모두 사용해야 할까, 아니면 알고리즘에 외부 영향을 주는 것을 막기 위해 20000개의 인터넷 이미지는 배제하는 것이 좋을까? (간단한 linear classifier로 구성된, 손으로 직접 만든 영상 처리와 같은) 초창기에 나왔던 학습 알고리즘을 쓸 때에는 이렇게 다른 데이터를 합쳐서 사용할 경우 ..
이전에 만든 고양이 분별기를 사용하는 유저들이 10000개 정도의 이미지를 업로드했고, 당신이 각 이미지들이 고양이가 포함되어 있는지 아닌지를 일일이 구별했다고 해보자. 또한 인터넷으로부터 다운로드 받은 이미지가 200000개 정도 있다고 해보자. 이때 학습 데이터와 개발 데이터, 테스트 데이터는 어떻게 정의할 수 있을까? 유저가 올린 10000개의 이미지가 실제로는 분별기가 잘 동작했는지를 나타내는 데이터의 분포를 나타내고 있으므로 아마 이 데이터들을 개발 데이터와 테스트 데이터로 활용할 것이다. 만약 데이터가 아주 많이 필요로 하는(data-hungry) 딥러닝 알고리즘을 학습시킨다면, 200000개의 인터넷 이미지들을 학습하는데 추가로 필요할 것이다. 이러면 학습 데이터와 개발/테스트 데이터는 각각..
- Total
- Today
- Yesterday
- 딥러닝
- Gan
- Distribution
- Expression Blend 4
- Kinect SDK
- Python
- Off-policy
- TensorFlow Lite
- reward
- Windows Phone 7
- arduino
- 한빛미디어
- Pipeline
- SketchFlow
- RL
- Offline RL
- PowerPoint
- Kinect
- dynamic programming
- processing
- Policy Gradient
- Variance
- End-To-End
- 강화학습
- DepthStream
- 파이썬
- Kinect for windows
- ColorStream
- windows 8
- bias
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |