최근 딥러닝 기법들이 기존 분류 기법(지난시간에 배웠던 것들)보다 좋은 성능을 보이고 있다.
본 주차에서는
1. 딥뉴럴네트워크와
2. convolutional neural network의 기본 구조를 살펴볼 것.
또한 최근까지 영상분류를 위해 제안되어왔던
3. 주요 네트워크 살펴보고
4. 이런 네트워크들을 의료영상분류에 적용하기 위한 방법 살펴볼 것.
저번주차에서 딥뉴럴네트워크가 일반적인, 레이어수가 적은 뉴럴네트워크보다
잘 동작하는 경우가 많다고 잠시 언급
언제 잘 동작하는지, 왜 잘 동작하는지 등 살펴보자
저번주차에서 다양한 classifier 구조 살펴봤다.
좌상 : logistic regression 구조
좌하 : neural network 구조
우 : deep neural network 구조
기본적인 원리들은 이미 다 살펴봄.
사실 로지스틱리그레션 구조 잘 알고 있다면, 이구조가 반복된 것이 뉴럴네트워크에서 나타나고(1번째 레이어),
2번째 레이어는 로지스틱 리그레션과 같은 동작함
첫번째 레이어는 현재 값이 없는데, 인풋값에 의해 (파라미터) 생성되는 것.
그래서 히든레이어라고 부른다.
딥뉴럴네트워크는 히든레이어가 여러개 있는것.
그리고 이 히든레이어들이 쭉 있기에 그 사이에 파라미터들이 상대적으로 많다.
뉴럴네트워크와 딥뉴럴네트워크의 차이는 히든레이어의 개수
그럼 먼저 히든레이어의 역할에 대해 살펴보자.
예시로, 이런 영상이 있다고 가정해보자.
이 영상의 레이블 맞추는 문제. 답은 숫자 7.
보통 이런 영상분석분류문제 같은 경우에 픽셀 값 하나하나를 피처로 이용할 수 있다.
이 모든 피처에 대해 파라미터 학습해서 값을 얻을 수 있을 것이고,
로지스틱/시그모이드 펑션에 그 값을 넣어서 프레딕션 값을 구할 수 있을 것이다.
첫번째 줄의 파라미터에는 큰 숫자들의 웨이트가 들어가고,
나머지 부분에 대해서는 0에 가까운 파라미터가 들어간다고 가정해보자.
그렇게 되면 위에있는, 첫번재 줄의 픽셀 값에 의해서 시그모이드내부의 값이 정해질 것이고,
이 값이 0보다 크면 최종 프레딕션 값이 0.5보다 클것이고,
만약 최종 프레딕션 값이 0보다 작은 값이 나오면 로지스틱/시그모이드 펑션에 의해 0.5보다 작은 값이 될것.
즉, 0.5보다 크면 7이다.
0.5보다 작으면 7이 아니다라고 할것.
그러면 노드(동그라미)의 역할은,
노드는 영상에서 가장 윗줄을 강조해서 보는 노드라고 생각할 수 있다.
예를 들어 7은 색칠된 곳이 꽤 있는편인데,
1을 넣으면 노드의 최종값이 작은 값이 나올 것이다.(첫번재 줄에 색칠된 곳이 작으니까)
결국 노드는 윗줄에 어떤 특징이 있는지를 확인하는 노드라고 할 수 있다.
이 노드 말고 다른 노드를 만들 수도 있다.
뉴럴 네트워크 구조를 보면 노드들이 여러개 있다.
다른 노드에서는 우상 9개쪽에 높은 파라미터값을 define되고, 나머지부분에는 작은 웨이트 값이 들어간다고 가정해보면
우상 9개를 강조하는 노드가 된다.
7인 경우에는 색칠되어 있는 부분이 많은 편.
이런 경우 노드에서는 높은 값이 나올 수 있다.
다른 숫자 4가 들어간다면, 색칠이 안되어 있을테니 작은 숫자가 나올 것.
이 노드는 우상 9개를 담당하는, 신호를 잘 확인할 수 있는 노드이다.
비슷한 원리로 다양한 부분을 확인 할 수 있다.
그래서 이런 노드들 하나하나가 자기가 담당하는 로컬한 부분의 특징을 확인 하고 있다고 생각할 수 있다.
그래서 이런 것들은 전체적인 구조로 보면,
어떤 노드는 위의 부분을 체크하고
다른 노드는 그 다음줄
다른 노드는 위의 왼쪽부분 부분...
이런 식의 노드들을 다양하게 만들 수 있을 것이고,
이부분이 첫번째 히든 레이어가 된다.
즉, 첫번재 히든 레이어는 이런 특정 로컬부분에 대한 특징을 추출해줄 수 있는 레이어이다.
이 이후의 같은 작업들을 반복하게 된다.
첫번째 히든 레이어의 값을 바탕으로 다음 네트워크들의 파라미터들을 학습하게 된다.
파라미터에 따라서, a1과 a2에서 온 파라미터는 큰수가 들어가고 나머지 파라미터에서 작은 숫자가 들어가게 되면
위의 두줄을 보게 되는, 첫번째, 두번재 노드에서 봤던 로컬한 곳 보다는 좀더 많은 부분을 볼 수 있는 레이어가 만들어진다.
마찬가지로 세로줄을 볼수도 있고, 위의 영역들을 전체적으로 볼 수도 있을 것.
이것이 두번재 히든 레이어 될 수 있다.
마찬가지로 이런 과정을 반복할 수 있을 것이고,
7에서 주로 색칠되는 곳들이 오른쪽 길다란 부분, 위쪽부분일텐데,
7이라는 영상을 넣게되면 이런 파라미터들을 쭉 가진 네트워크가 있다고 하면,
WX+b를 계산했을때, 0보다 큰 값이 나올 것이고
7이 아닌 다른 숫자 들어가게 되면 0보다 작을 것이다.
2번째 히든 레이어보다는 higher 레벨 피처들이 추출 될 것이다.
그래서 이런 하이레벨 피처들을 바탕으로 판단 했을 때,
히든 레이어가 거의 없는 로지스틱리그레션이나 뉴럴네트워크 생각해보면
low레벨피처들을 바탕으로 클래시피케이션 한다고 생각할 수 있는데,
딥뉴럴네트워크에서는 하이레벨피처를 보고 클래시피케이션을 수행한다고 생각할 수 있다.
실제 이런 숫자영상대신, 이런 영상 넣었을때,
어떤 식으로 학습되는지 확인해보면,
먼저 영상의 엣지나 텍스처같이 아주 로컬한 피처들이 첫번재 레이어에서 추출이 된다.
그 이후에 이런 피처들의 조합을 바탕으로 웨이트들에 따라서 로컬 피처들의 조합으로 중간단계 피처들이 뽑히게 되고
그 이후에 좀더 높은 수준의 피처들이 뽑히고, 이 피처들을 바탕으로 최종판단을 한다.
이게 휴먼인지 아닌지를 판단한다.
딥뉴럴 네트워크 구조를 보면, 앞단에서는 feature들을 extraction한다고 생각할 수 있다.
원래는 다양한 feature extraction 기법있고, 그런 피처익스트랙션 기법사용한 뒤에
여기서 나온 피처들을 바탕으로 로지스틱리그레션이라던지, 뉴럴네트워크라던지 다양한 클래시파이어를 이용해서
클래시피케이션했었는데
딥 뉴럴 네트워크에서는 피처익스트랙션 과정이 클래시파이어를 만드는 과정과 컴바인됬다고 볼 수 있다.
앞단에서는 피처들이 추출되고
뒷단에서는 이 피처들을 바탕으로 클래시피케이션이 된다고 생각할 수 있다.
마지막 부분에서는 이런 피처들을 바탕으로 클래시피캐이션 한다고 생각할 수 있고,
이 피처들이 결국 사람의 특성을 잘 나타내는 피처가 만들어지게 된다.
사람뿐만 아니라, 다른 영상 넣을 수도 있다.
강아지넣으면 강아지 잘 나타내는 피처 만들어질 것이다.
이런 학습데이터들을 많이 넣어주게 되면
휴면, 도그, 캣 잘 구분해내는 특징들이 추출되게 된다.
예를들면 사람의 입, 강아지의 코와입, 고양이의 코와입이 상당히 다르다.
다른 부분들의 특성을 피처로 뽑을 수 있다고 한다면,
구분이 쉬워진다.
딥뉴럴 네트워크 동작하는 원리 살펴보면
피처익스트랙션을 사람이 보통 해주는 경우가 많았는데,
???
end to end 러닝이라고 부르는데
영상을 넣어주고, (y값이 있다고 가정하면)영상과 레이블간의 관계를 학습하는,
그리고 이 레이블을 구분하는데 유용한 피처를 자동으로 최적화해서
그래디언트 디센트로 피처들을 추출할 수 있는 파라미터들을 학습을 해준다는 측면이 중요한 내용이다.
이 슬라이드에서는 딥러닝, 딥뉴럴네트워크 학습할때,
데이터사이즈가 중요하다는 것을 보여준다.
단순한 로지스틱리그레션 스트럭처와
뉴럴네트워크 스트럭처 살펴보면
로지스틱은 파라미터 수 상당히 적은데
딥뉴럴네트워크에서는 상당히 많은 수의 파라미터가 있다.
학습데이터 적을 때는 성능차이가
conventional한 러닝 알고리즘들이(예로 로지스틱리그레션, 뉴럴네트웍, 서포트벡터머신, 랜덤포레스트 등 다양한 클래시피케이션 기법)이나 딥뉴럴네트워크 쓰나 성능차이가 별로 없다.
그이유는
데이터 적다면, 이 데이터들을 describe할 수 있는 파라미터의 조합이 상당히 많아질수가 있는데
즉, 트레이닝데이터에만 상당히 포커스되서 잘 동작하게 만드는 클래시파이어가 만들어진다.
하지만 그 클래시파이어는 실제, 다른 테스트이미지가 들어왔을때 동작 잘 하지 않을수 있다.(오버피팅)
오버피팅 문제들이 발생하기 때문에,
단순한 구조나, 복잡한 구조나 성능 비슷하다.
하지만 데이터 많아지면 많아질수록 많은 데이터를 잘 대표할수 있는 파라미터 변화가 이 모델에서는
제한적이게 되는 것이고
하지만 딥뉴럴네트워크에서는 많은 수의 파라미터로 다양한 베리에이션을 커버해줄수 있기때문에 성능이 계속 높아지는 퍼포먼스 그래프를 확인할 수 있다.
결국, 많은 수의 파라미터를 잘 학습시켜줄수 있는, 많은 수의 학습데이터가 필요한 것이고
많은 학습데이터의 다양한 배리에이션 커버해줄수있는 파라미터들이 학습될수있기에
딥뉴럴네트워크가 성능이 좋다
의료영상분석에서는 데이터사이즈가 적은 경우가 많다.
실제 데이터 작은 경우에 딥러닝을 사용하거나
뉴럴네트워크, svm, rf 사용하거나 성능차이가 꽤 없는 경우가 꽤 있다.
이상한 것이 아니고, 그것은 데이터문제일 수 있다.
데이터 늘어나면 성능이 좋아질 수 있다.
여기까지 딥뉴럴네트워크가 왜 잘 작동하는지, 언제 효과가 좋은지 살펴봤는데
이 장에서는 간단히 한계점을 보자
좋긴한데, 의료영상문제에 대해 쓰기가 좀 힘들다.
저번에도 살펴봤지만
3차원 영상이 크다는 문제가 있다.
인풋레이어에 피처가 영상이용하려면 너무 크다.
100만개 피처들어오고 노드가 만개라고만 해도 엄청난 파라미터가 있다.
또 천개의 노드를 설정해준다고 해도 또 많은 수의 파라미터가 나온다.
딥하게 쌓으면 쌓을 수록 파라미터수가 많아진다는 한계점이 있다.
그래서 피처뽑아서 피처값을 넣어준다고 하기도 했다.
이렇게 되면, 피처익스트랙션해주는 스텝들어가게되고
피처 얼마나 잘 뽑아주었느냐에 따라서 성능 바뀔 수 있다.
그래서 이런 점 극복하고자
컨볼루셔널 뉴럴 네트워크 제안되었는데
다음차시에서는 컨볼루셔널 뉴럴 네트워크 살펴보도록 하겠다.
'Deep learning' 카테고리의 다른 글
3-4.Advanced CNNs (LeNet, AlexNet, VGG) (0) | 2020.09.15 |
---|---|
3-3. Convolutional Neural Network (CNN) (0) | 2020.08.20 |
3-2. Convolution (0) | 2020.08.19 |
2-7. Classification with demographic scores (0) | 2020.08.09 |
2-6.Medical image classification (0) | 2020.08.08 |
2-5.Image Classification (0) | 2020.08.08 |
2-4.Neural Network (0) | 2020.08.06 |