고양이 감지기의 성능을 향상시키기 위해 몇가지 아이디어를 내놨다.- 개를 고양이로 인식하는 것에 대한 알고리즘 문제 해결 - 사자나 표범과 같이 거대한 고양이과 동물을 집고양이라고 인식하는 것에 대한 알고리즘 문제 해결 - 흐릿한 이미지에 대한 시스템 성능 개선이런 아이디어들을 병렬로 효율적으로 평가를 할 수 있다. 종종 본인은 엑셀과 같은 스프레드시트를 만들고 100여개의 잘못 분류된 개발 데이터 이미지를 보면서 그걸 채운다. 또한 몇몇 예제에 관해서 기억하기 쉽게끔 코멘트를 기입한다. 이 과정에 대해 묘사하기 위해서 아래와 같이 4개의 개발 데이터에 대한 스프레드시트를 한번 보자.Image Dog Great Cat Blurry Comments 1 O 흔하지 않은 색깔을 가진 핏볼 2 O 3 O O 비..
이전에 만든 고양이 앱을 실행하다보면, 고양이를 개로 잘못 분별하는 몇몇 케이스를 확인할 수 있을 것이다. 어떤 개들은 정말 고양이 같이 생기기도 했다. 개발 인원 중 하나가 개 이미지에 대해서 조금더 잘 찾아낼 수 있게 해주는 외부 SW를 도입할 것을 제안했다. 이걸 적용하려면 한달정도 걸릴 것이고, 그 인원은 매우 열심히 할 것이다. 만약 당신이라면 그에게 진행하라고 할수 있을까? 이 업무에 대해서 한달이란 시간을 쓰기전에 먼저 해당 작업이 시스템의 정확성을 얼마나 올려줄 수 있는지 먼저 검토해볼 것을 추천한다. 그러고나서 이성적으로 그게 한달의 개발 시간을 쓸 가치가 있는지를 결정하고, 그게 아니면 다른 일에 그 시간을 쓸 수 있어야 한다. 자세하게 말하자면, 당신이 해야 할 일은 이것이다:1. 먼..
만약 새로운 스팸메일 탐지 시스템을 만들고 싶다면, 몇가지 아이디어를 떠올릴 수 있을 것이다.- 엄청난 량의 학습시킬 스팸 메일을 수집한다. 예를 들어 "꿀단지" 같은 것을 만드는 것인데, 흔히 알려져 있는 스팸 출처에 가짜 이메일 계정을 보내면, 자동적으로 출처가 그 계정으로 보낸 스팸 메일들을 수집할 수 있을 것이다. - 메일안에 있는 문맥을 이해할 수 있는 기능을 개발한다. - 이메일의 헤더를 인식시킬 수 있는 기능을 만들어 스팸 메일들이 어떤 서버를 거쳐서 오는지를 보여준다. - 기타 등등... 나도 스팸 메일 탐지와 관련해서 많이 일해봤지만 여전히 위의 방법 중 어떤 방법을 선택하는지 어려움을 겪고 있다. 아마 당신도 해당 영역의 전문가가 아니라면 더 어려울 것이다. 그렇기 때문에 시작부터 완벽..
- 당신이 미래에 얻길 원하고, 잘 동작하기를 원하는 성향을 잘 반영한 분포를 가지는 개발 데이터와 테스트 데이터를 취해라. 어쩌면 그 데이터들은 학습 데이터의 분포와 같지 않을 수도 있다.- 되도록이면 개발 데이터가 테스트 데이터와 분포가 같은 것들을 취하라.- 최적화할 수 있는 단수 형태의 평가 지표를 선정하라. 만약 신경써야할 goal이 여러 개라면, 그 값들을 하나의 공식을 통해서 결합하던가(예를 들어 여러 개의 오차 지표의 평균을 낸다던가) 혹은 만족 지표와 최적화 지표를 정의하던지의 방식을 적용해라.- 머신러닝 자체는 매우 반복적인 작업이기 때문에 어떤 적당한 알고리즘을 찾기 전에는 수많은 알고리즘들을 시도해볼 수 있을 것이다.- 개발/테스트 데이터를 가지고, 뭔가 단수 형태의 평가 지표를 가..
보통 새로운 프로젝트를 시작할 때, 나는 빠르게 개발 데이터/테스트 데이터를 선정한다. 이를 통해서 우리가 추구하는 잘 정의된 목표를 찾을 수 있기 때문이다. 나도 보통 우리팀한테 초기의 개발/테스트 데이터와 초기 평가 지표를 찾아내는데 1주일을 넘지 않게 준다. 한가지 주제에 대해서 과도하게 생각하기 보다는 뭔가 완벽하지는 않지만 빠르게 얻어내는게 조금더 낫기 때문이다. 하지만 이 1주일이라는 시간은 우리가 만들고 있는 것을 발전시키는데 반영되지는 않는다. 예를 들어 스팸차단 시스템은 이미 발전된 형태의 딥러닝 시스템이다. 이렇게 발전된 형태의 시스템도 더 좋은 개발/테스트 데이터를 얻기 위해서 몇달을 쓰곤한다. 만약 나중에라도 초기에 잡은 개발/테스트 데이터나 평가 지표가 뭔가 초점에서 어긋났다는 것..
새로운 문제를 딱 접했을 때, 어떤 접근 방식이 가장 잘 동작하는지 미리 아는 것은 매우 어려운 일이다. 많은 경험이 쌓인 머신러닝 엔지니어라도 만족스러운 결과를 얻을 때까지 다양한 아이디어들을 시도해본다. 머신러닝을 적용한 시스템을 만들때, 나는 보통 이렇게 한다.1. 시스템을 어떻게 만들 수 있는지 몇가지 아이디어를 내본다. 2. 그런 아이디어들을 코드로 구현해본다. 3. 어떤 아이디어가 동작하는지 실험을 해본다.(종종 몇몇 아이디어들은 잘 동작하지 않는다.) 이런 학습을 통해서 다시 아이디어를 내보고, 반복해본다. 이건 일종의 반복 작업이다. 이런 반복 과정을 빠르게 수행할수록, 일의 진척이 빨라진다. 이게 바로 개발 데이터/테스트 데이터를 가져야 하고, 평가 지표가 중요한 이유이다. 매번 새로운 ..
여러 개의 평가 지표(Evaluation Metrics)를 결합하는 또다른 방법이 있다.Classifier Accuracy RunningTime A 90% 80ms B 92% 95ms C 95% 1500ms Accuracy와 Running Time 을 아래와 같이 Accuracy - 0.5 * RunningTime 라는 식을 통해 accuracy와 RunningTime을 하나의 식에 넣음으로써 하나의 평가 척도로 정의하는 것 자체가 부자연스럽게 보일 수 있다. 여기서 이렇게 식을 넣는거 대신에 할 수 있는 것이 있다. 첫번째로 "받아들일 수 있을 만한" RunningTime이 무엇인지를 정의해볼 수 있다. 예를 들어 100ms안에 동작하는 것은 어떤것이든 받아들일 수 있을만한 것이라고 가정해보자. 그러면..
분류 정확성은 단수(single number)로 표현할 수 있는 평가 척도 중 하나이다. 당신이 만든 분류기에 개발 데이터(혹은 테스트 데이터)를 넣고, 해당 데이터가 정확하게 분류를 했는지에 대한 비율을 단수로 평가해주는 것이다. 이 평가 척도에 따르면, 만약 A 분류기가 97%의 정확성을 가지고, B 분류기가 90%의 정확성을 가진다면, 보통 우리는 A 분류기의 성능이 더 좋다고 판별할 수 있다. 이와 대조적으로, 정밀도(Precision)과 재현율(Recall)은 단수로 표현할 수 있는 평가 척도가 아니다. (참고로 정밀도는 분류기가 참이라고 분류한 결과물 중 실제로도 참일 확률을 말하고, 재현율은 분류기가 정상적으로 분류한 것들 중에서 실제로도 참일 확률을 말한다. 수식으로 표현하면 다음과 같다...
개발에 적용할 알고리즘들 간의 차이를 확인하기 위해서는 개발 데이터가 충분히 많아야 한다. 예를 들어 A 분별기가 90.0%의 정확성을 가지고, B 분별기가 90.1%의 정확성을 가진다고 가정한다면, 100개의 개발 데이터를 가지고는 0.1%의 차이를 확인하기 어려울 것이다. 본인이 접한 다른 머신러닝을 활용한 문제들을 놓고 보았을 때, 100개의 개발 데이터는 매우 적은 량이다. 일반적으로 개발 데이터는 1000개에서 10000개 사이의 데이터를 가진다. 10000개의 데이터를 통해서라면 앞에서 언급했던 0.1%의 성능 향상을 확인하기 쉬울 것이다. (이론상으로는 개발 데이터 상에서 알고리즘들 간의 차이가 통계적으로 큰 차이를 가지는지를 확인해볼 수 있다. 하지만 현업상에서는 이런 관점을 (굳이 논문으..
이전에 다뤘던 내용에 덧붙여서 개발 데이터와 테스트 데이터를 정의하고 난 이후에, 이제 개발 데이터의 성능을 향상시키는 방법에 초점을 맞출 것이다. 결론적으로 개발 데이터는 가장 최우선적으로 당신이 향상시키고자 하는 학습을 반영할 수 있어야 한다. 여기에 개발 데이터와 테스트 데이터의 분포가 다름으로써 발생할 수 있는 문제가 있다. 바로 개발 데이터 상에서는 잘 동작하는데, 실제로 테스트 데이터에서는 매우 안좋게 돌아가는 것이다. 이런 경우 큰 좌절감이 생기고, 노력이 낭비되는 것을 봐왔는데, 이런 현상이 발생하는 것을 막아야 한다. 예를 들어 현재 개발되는 시스템이 개발 데이터에서는 잘 돌아가고 테스트 데이터에서는 잘 돌아가지 않는 현상이 발생한다고 가정하자. 만약 개발 데이터와 테스트 데이터가 같은 ..
만약 고양이 사진을 추출해주는 앱을 만들고 있다고 가정해보자. 아마 사진들로부터 고양이라는 것을 판별할 수 있는 영상처리 SW를 만들기 위해 신경망을 사용할 것이다. 하지만 불행하게도 만든 알고리즘의 정확도가 그렇게 생각만큼 높지 않을 것이고, 고양이 이미지를 추출하는 SW를 개선하기 위해서 압박을 받을 것이다. 어떻게 하면 좋을까? 여기에 대해서 다양한 아이디어를 낼 수 있다. 예를 들어- 고양이 사진을 조금더 모으기 - 조금더 다양한 학습 데이터를 모으기. 예를 들어서 흔하지 않은 자세를 취하는 고양이나, 흔하지 않은 색을 가진 고양이나, 다양한 카메라 각도를 가지는 사진 같은 것들. - gradient decent 횟수를 늘림으로써 알고리즘을 조금더 오랫동안 학습시키기 - 더 많은 layer와 no..
딥러닝(신경망)에서 쓰이는 많은 수많은 아이디어들은 수십년에 걸쳐서 유효하다. 어떻게 그 아이디어들이 현재까지도 잘 동작하는 것일까? 크게 두 가지 부분에서 그런 경향을 찾을 수 있다.- 데이터의 유효성(Data availability) : 사람들이 이제는 노트북이나, 휴대용 기기와 같이 디지털 장비를 사용하는 시간이 예전에 비해서 많이 늘어났고, 이런 경향으로 인해서 학습 알고리즘에 적용할 수 있는 수많은 데이터가 생산된다.- 연산량(Computational Scale) : 신경망을 학습시킬 수 있게 된지 몇년되지 않았고, 현재의 신경망으로도 우리가 가지고 있는 어마어마한 량의 데이터를 처리하기에 충분하다. 조금 더 자세하게 말하자면, 아무리 데이터를 많이 축적했다 하더라도, 일반적으로 Logistic..
아마 최근 Anaconda를 활용하는 사람이라면 Visual Studio Code (VS-code)를 개발툴로 많이 활용할 수 있을 것이다. 그런데 좀 익숙해지면 디버깅도 되고, unit test도 되고 정말 좋은 툴인데, 처음 다뤄보는 사람이라면 좀 헤맬수도 있다. 그중 python을 terminal로 실행시킬 때 Powershell로 실행되서 난감할 때 취할 수 있는 방법에 대해서 소개해보고자 한다. 우선 제일 처음 python script상에서 Run Python in terminal을 선택하면 해당 script를 windows내 기본 terminal로 실행되는데, 별다른 설정하지 않는다면 아마 default가 Powershell로 되어 있다. 아마 terminal 제일 처음 란을 보면 Window..
사실 지난번 plot까지 하면 얼추 plot을 통해서 표현하고자 하는 내용을 전달할 수 있다. 그렇지만 이런 plot을 하는 이유는 이 plot을 보는 사람에게 조금더 정보를 효율적으로 전달하는데 의미가 있다. 이렇게 plot 자체를 효율적으로 표현하는 기법으로 legend(범례)와 Annotation(각주), Style에 대해서 잠깐 소개해본다. (기본적으로 사용하는 예제 dataset은 이전 포스트와 동일하다. 우선 우리가 보통 범례라고 표현하는 legend는 plot내에서 표현되는 data의 label을 나타낸다. 보통 plot으로 표현되는 data는 pandas의 DataFrame이므로 그 label이라고 하면 해당 Frame의 Column name이 될 것이다. legend를 삽입하는 방법은 간..
보통 Data Science상에서 주로 쓰는 Python Visualization package가 여러 개 있는데, 많이 쓰는 것이 Scipy package에 들어있는 matplotlib.pyplot (보통 plt라고 alias해서 사용한다.) 거기서 주로 사용하는 기능에 대해서 간단히 다뤄보고자 한다. 우선 첫번째로 다룰 기능 multiple plot이다. 보통 그래프를 그리게 되면 한 plot당 하나의 그래프가 출력되겠지만, 필요에 따라서는 여러 개의 plot을 하나의 grid에 출력하고 싶을 때도 있을 것이고, 혹은 하나의 plt당 여러개의 plot을 나눠서 따로따로 출력하고 싶을 수도 있다. 일단 가장 흔하게 할 수 있는 건 하나의 common 축을 가지는 그래프를 출력해보는 것은 다음과 같다. ..
- Total
- Today
- Yesterday
- Distribution
- dynamic programming
- Kinect
- processing
- RL
- Offline RL
- End-To-End
- Kinect for windows
- ai
- Pipeline
- 딥러닝
- arduino
- reward
- Windows Phone 7
- ColorStream
- TensorFlow Lite
- Variance
- 한빛미디어
- SketchFlow
- Off-policy
- 강화학습
- Policy Gradient
- 파이썬
- Expression Blend 4
- PowerPoint
- Gan
- windows 8
- DepthStream
- Kinect SDK
- 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 |