- Python
- 맛집
- ai_엔지니어링
- k-디지털트레이닝
- 전주
- 제주도
- 우리에프아이에스
- 해리포터
- 축복렌즈
- 대만
- 17-55
- 오사카
- 건담
- 군산
- 여행
- 도쿄
- CS231n
- 글로벌소프트웨어캠퍼스
- 우리fisa
- 650d
- 축복이
- 시청
- fdr-x3000
- SQL
- 전시
- 수요미식회
- 사진
- 우리fis아카데미
- 대만여행
- 카페
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Today
- Total
브렌쏭의 Veritas_Garage
[CS231n] #2. 이미지 분류(2) 본문
실제 상황에서 K-Nearest Neighbor는 이미지 분류에는 사용되지 않는다
- 이미지를 훈련하는 시간은 상대적으로 짧지만 정작 예측하는 속도가 느리다
- 이미지와 같은 데이터가 고해상도로 올라갈수록 연산 난이도가 급격히 상승한다
- 이미지가 고차원적으로 갈수록 N의 제곱으로 분석할 포인트들이 생겨난다
Linear Classification :: 뉴럴 네트워크의 레고 블록
Linear classification 이란 무엇인가, 하니 개체를 인식할때 보다 '관념적'으로 접근할 수 있도록 하는 것에 가깝다.
물론 컴퓨터가 관념을 가진다는 이야기는 아니고, 굉장히 구체적이고 단편적인 예시들로 훈련을 거쳐 조금만 달라져도 인식을 못하던 이전 방식 대신에, 모호하고 포괄적인 이미지를 비교대상으로 삼고 물체를 인식하는 것이다.
여기서 간단한 점은 Linear하기 때문에 직선으로 이루어진 구분선이 있다는 점.
깔끔하게 양쪽이 나뉘는 것을 볼 수 있다.
물론 Linear하기 때문에 생기는 문제점도 있다. 직선이기 때문에, 요상하게 분포된 경우 적절한 경계를 지을 수가 없게 된다.
위 예시를 보면 어떻게 온몸 뒤틀어가며 선을 그어도 직선으로는 절대 분류를 할만한 상황이 나오질 않는다.
이런 상황에서는 SVM, Decision Tree, Random Forests, ANN 같은 알고리즘이 나을 것이다.
Support Vector Machine (SVM)
직선으로 구분짓는 Linear Classification과 달리, SVM은 초평면이라 불리는 Decision Boundary를 만든다.
이때 초평면은 그냥 2D평면이 아니라 상황에 따라 선, 평면, 다차원 평면을 포함한다.
고양이와 강아지를 구분한다고 했을 때, 이제 강아지같은 고양이와 고양이같은 강아지, 서로 애매하게 닮아 경계에서 각각 가장 가까운 친구 두마리가 있다고 하자.
이제 그 두마리가 위치한 곳을 Support Vector라고 한다.
Decision Boundary에서 가장 가까운 곳에 위치해 있으며 그 형태와 위치, 방향을 결정하는 중요한 요소다.
왜 서포트 벡터냐 하면 위에도 말했듯이 Decision Boundary를 지지하고 결정짓기 때문.
그리고 이제 그 중간 지점에 경계가 생기고 경계로부터 각 catdog까지의 거리를 Margin이라고 한다. 이때 마진폭은 클수록 좋은건 당연하겠지?
이것이 분류를 위한 '가장 큰 길' 을 찾는 SVM이다.
Decision Trees : 결정 트리
의사결정의 과정을 나무모양의 구조로 나타내서 Decision Trees라고 한다.
고양이과 강아지말고 사과와 바나나로 해보자
빨간색인가? -> 둥그렇나 -> 자르면 노란색인가 -> 나무에서 열리는가 -> ...
같은 방식으로 데이터 세트를 가장 잘 구분할 수 있는 질문을 생성하여 데이터를 점점 더 작은 집합으로 분할한다.
이때 완결 조건이 충족되면 추론을 끝낸다.
굳이 따지자면 스무고개같은 것이다.
아키네이터도 비슷하겠네
문제점도 아키네이터와 비슷하다.
지나치게 알려진 사람, 캐릭터에만 훈련이 되어서 우리집 옆에 사는 철수는 분류를 못해준다.
그리고 분류를 해놨더니 데이터에 변화가 생기면 못알아본다.
Random Forests :: decision trees의 앙상블
Decision Trees를 이제 여러개를 생성해서 모든 트리의 결과값을 평균이나 다수결로 결정하는 방법이다.
그래서 결정 나무들이 여러개 모였으므로, Random Forests 라는 무작위 숲이 된다. (푸하하 교수님 너무 재밌으시다)
ANN : Artificial Neural Network
지금 하고 있는게 뉴럴 네트워크 아니었나 싶긴 한데, 몬가 다른 것이다.
이전에는 각각의 함수가 기능을 갖추고 있었지만
뇌의 신경망 구조를 그대로 본따서 최소단위는 뉴런이다(!)
뉴런가지고 뭘 하려는 건가 제정신인가 얼마나 좋은 연산기능이 필요한것인가 등등의 생각이 들지만,
기술의 발달로 가능해졌다.
멋진 알고리즘을 찾다가 열받아서 딜찍누를 시전하는 모습이다.
각 인공뉴런은 실제 뉴런이 그렇듯이 구조도 비슷하다
Dendrite에서 여러가지 입력을 받는다. 그리고 Synaptic bulb에서 하나의 출력을 낸다.
그리고 중간에 Soma가 Hidden Layer로써 은닉층이라고 한다.
은닉층에서 패턴을 학습하고 입력받은 데이터를 변형하는 과정을 거치는데, 성능을 결정하는 중요 요소이다.
실제 뉴런이 시신경에서 그러하듯, 특정 뉴런은 왼쪽으로 45도 기울어진 직선에만 반응하고, 어떤건 원형에만 반응하고 이런 식.
인공신경망의 구축비용이 올라가는 원인이다.
재미있는 건 출력층, Output Layer에서 Activation Function이 있다는 점이다. 마치 뉴런 시냅스 전달의 역치처럼, 일정 수준 이상의 출력값만 전달하거나, 출력값을 학습의도에 따라 변경하거나 하는 조작이 이루어진다.
이거 완전 Action potential 아니냐..
전달할 가치가 있다고 판단되는 경우에만, 역치를 넘는 경우 전달되도록 활성함수, Activation Function 이 작동한다.
이러한 방식은 ReLU 함수 (0이하는 무시, 그 이상은 원본값 그대로 전달)가 제일 비슷한듯
2강 끝.
'[Project_하다] > [Project_공부]' 카테고리의 다른 글
[3Blue1Brown] DeepLearning (1) | 2024.07.01 |
---|---|
[CS231n] #4. Neural Network (1) | 2024.07.01 |
[CS231n] #3. Loss Function, 최적화 (0) | 2024.06.28 |
[CS231n] #2. 이미지 분류(1) (0) | 2024.06.27 |
[CS231n] #1. Computer Vision의 역사 (0) | 2024.06.26 |
정중함, 회사는 유치원은 아니나, 옥타곤도 아니므로 (1) | 2022.07.21 |
업무의 일환 :: 기능 명세, ERD 그리고 Git Branch(조금) (0) | 2022.05.06 |