머신러닝에 대한 책을 5권에서 6권정도 읽고 있는데 잘 이해가 안되는 부분이 참 많습니다. 그래서 내용을 필사하면서 직접 코드를 입력하면서 반복해서 보고 있습니다. 작년에 보았던 내용들 보다 더 많이 이해가 되고 점점 쉽게 느껴지는 부분도 생기네요. ^^
아래와 같은 순서로 책을 보시면됩니다. 파이썬 언어를 공부해야 합니다. => 판다스를 사용할 수 있어야 합니다. => 머신러닝, 딥러닝을 공부할 수 있습니다. 제가 정리한 글에 있습니다. 이런 순서로 공부하고 선형대수나 미분에 대한 내용을 개발자를 위한 수학책으로 따로 정리하면 될 것 같습니다. 좌절과 희열을 반복하면서 보고 있는데 점점 좌절보다는 희망을 보고 있습니다. 기계학습과 강화 학습을 공부하시는 모든 분들 화이팅입니다. ~~~~
https://steemit.com/kr/@papasmf1/73cj22
핸즈온 머신러닝 책의 소스는 아래의 깃허브에 있습니다. 참고하실 수 있습니다.
https://github.com/rickiepark/handson-ml
제가 테스트하고 실습하는 환경은 맥에 아나콘다 최근 패키지를 설치해서 주피터랩으로 실행하고 있습니다. 아나콘다 패키지를 사용하는 경우에 텐서플로는 쉽게 설치할 수 있습니다. ^^
13장도 내용이 쉽지 않네요. ㅎㅎ
13장 합성곱 신경망
꽤 최근까지 컴퓨터는 사진에서 강아지를 감지하거나 음성을 인식하는 것같은 외견상 간단해 보이는 작업을 안정적으로 수행할 수 없었습니다. 왜 사람에게는 이런 작업이 수월할까요? 사람의 지각 대부분은 의식 영역 밖에 있는 뇌의 특별한 시각, 청각, 그리고 다른 감각기관에서 일어난다는 사실에 해답이 있습니다. 감각의 정보가 우리 의식에 도달할 때는 이미 고수준의 특성으로 채워져 있습니다.
합성곱 신경망 convolutional neural network(CNN)은 대뇌의 시각 피질 연구로부터 시작되었고 1980년대부터 이미지 인식 분야에 사용되었습니다. 최근 몇 년 동안 컴퓨터 성능의 향상과 많은 양의 훈련 데이터, 11장에서 본 심층 신경망을 훈련시키기 위한 기술 덕분에 CNN이 일부 복잡한 이미지 처리 문제에서 사람을 능가하는 성능을 달성했습니다. 이 기술은 이미지 검색서비스, 자율주행 자동차, 영상 자동 분류 시스템 등에 큰 기여를 했습니다. 또한 CNN은 시각 분야에 국한되지 않고 음성 인식 voice recognition이나 자연어 처리 natural language processing(NLP)같은 다른 작업에도 많이 사용됩니다.
13.1 시각 피질의 구조
데이비드 허블과 트르스텐 비셀은 1958년과 1959년에 시각 피질의 구조에 대한 결정적인 통찰을 제공한 고양이 실험을 연속해서 수행했습니다. 그리고 몇 년 뒤에는 원숭이를 대상으로 실험했습니다. 특히 그들은 시각 피질 안의 많은 뉴런들이 시야의 일부 범위 안에 있는 시각 자극에만 반응한다는 뜻입니다. 뉴런의 수용장들은 서로 겹칠 수 있어 합치면 전체 시야를 감싸게 됩니다. 거기에 더해 어떤 뉴런은 수평선의 이미지에만 반응하고 반면 다른 뉴런은 다른 각도의 선분에 반응한다는 점을 보였습니다.
시각 피질에 대한 이런 연구는 1980년에 소개된 신인식기에 영감을 주었고 우리가 지금 합성곱 신경망이라고 부르는 것으로 점진적으로 진화되었습니다. 1998년 얀 르쿤, 레옹 보토, 요슈아 벤지오와 패트릭 하프너의 논문이 중요한 전환점이 되었습니다. 여기에서 수표에 쓰인 손글씨 숫자를 인식하는데 널리 사용된 유명한 LeNet-5구조를 소개했습니다. 이 구조에는 우리에게 익숙한 완전 연결 층과 시그모이드 활성화 함수 같은 구성 요소가 들어 있지만, 이 외에도 합성곱층과 풀링층이란 두 개의 새로운 구성 요소도 소개합니다. 이 두가지 구성 요소에 대해 살펴보도록 하겠습니다.
13.2 합성곱층
CNN의 가장 중요한 구성 요소는 합성곱층 convolutional layer입니다. 첫번째 합성곱층의 뉴런은 (이전 장에서처럼) 입력 이미지의 모든 픽셀에 연결되는 것이 아니라 합성곱층 뉴런의 수용장안에 있는 픽셀에만 연결됩니다. 두 번째 합성곱층에 있는 각 뉴런은 첫 번째 층의 작은 사각 영역 안에 위치한 뉴런에 연결됩니다. 이런 구조는 네트워크가 첫 번째 은닉층에서는 저수준 특성에 집중하고, 그 다음 은닉층에서는 고수준 특성으로 조합해 나가도록 도와줍니다. 이런 계층적 구조는 실제 이미지에서 흔히 볼 수 잇으며, 이는 CNN이 이미지 인식에 잘 작동하는 이유 중 하나입니다.
13.2.1 필터
뉴런의 가중치는 수용장 크기의 작은 이미지로 표현될 수 있습니다. 필터(또는 합성곱 커널)라 부르는 두 개의 가중치 세트를 보여줍니다. 첫 번째 것은 가운데 흰 수직선이 있는 검은 사각형입니다. 가운데 열은 1로 채워져 있고 그 외에는 모든 0인 7*7행렬입니다. 이런 가중치를 사용한 뉴런은 가운데 수직선 부분을 제외하고는 수용장에 있는 모든 것을 무시할 것입니다.
13.2.2 여러 개의 특성 맵 쌓기
지금까지는 단순함을 유지하기 위해 합성곱층을 얇은 2D층으로 표현했지만, 실제로는 같은 크기의 여러 개의 특성 맵으로 구성되어 있어서 3D로 표현하는 것이 더 정확합니다.
13.2.3 텐서플로 구현
텐서플로에서 각 입력 이미지는 보통 [높이,너비,채널]형태의 3D텐서로 표현됩니다. 하나의 미니배치는 [미니배치 크기, 높이, 너비, 채널]형태의 4D텐서로 표현됩니다.
13.2.4 메모리 요구사항
CNN에 관련된 또 하나의 문제는 역전파 알고리즘이 역방향 계산을 할 때 정방향에서 계산했던 모든 중간 값을 필요로 하기 때문에 특히 훈련하는 동안에 합성곱층이 많은 양의 RAN을 필요로 한다는 점입니다.
13.3 풀링층
어떻게 합성곱층이 작동하는지 이해했다면 풀링층은 매우 쉽게 이해할 수 있습니다. 이 층의 목적은 계산량과 메모리 사용량, 그리고 파라미터 수를 줄이기 위해 입력 이미지의 부표본(즉, 축소본)을 만드는 것입니다. 입력 이미지의 크기를 줄이면 이미지가 약간 이동해도 신경망이 영향을 덜 받습니다.
13.4 CNN구조
전형적인 CNN구조는 몇 개의 합성곱층을 쌓고, 그 다음에 풀링층을 쌓고, 그 다음에 또 몇 개의 합성곱층을 쌓고, 그 다음에 다시 풀링층을 쌓는 식입니다. 네트워크를 통과하여 진행할수록 이미지는 점점 작아지지만, 합성곱층 때문에 일반적으로 점점 더 깊어집니다.
13.4.1 LeNet-5
LeNet-5구조는 아마도 가장 널리 알려진 CNN구조일 것입니다. 앞서 언급한 바와 같이 이 구조는 1998년에 얀 르쿤이 만들었으며 손글씨 숫자 인식에 널리 사용되었습니다.
13.4.2 AlexNet
AlexNet CNN구조는 2012년 이미지넷 대회에서 큰 차이로 우승했습니다. 17%의 톱-5에러율을 달성했습니다. 이 네트워크는 알렉스 크리체프스키, 일리아 서스케버, 제프리 힌튼이 만들었습니다.
13.4.2 GoogLeNet
구글 리서치의 크리스찬 세게디 등이 개발한 GoogLeNet구조는 ILSVRC 2014대회에서 톱-5 에러율을 7%이하로 낮추었습니다. 이런 괄목할만한 성능은 네트워크가 이전 CNN보다 훨씬 더 깊기 때문입니다.