본문 바로가기

Deep Learning

[CS231n] Lecture 2: Image Classification

Image Classificaiton은 컴퓨터가 입력받은 이미지를 보고 어떤 카테고리에 속할지 고르는 작업니다.

시스템에는 개, 고양이, 트럭, 비행기 등  미리 정해져 있는 카테고리 집합이 있다.

 

컴퓨터에게 이미지는 아주 큰 격자 모양의 숫자 집합에 해당한다. 

각 픽셀은 rgb값을 의미하는 세 개의 숫자로 표현된다.

이러한 거대한 숫자 집합에서 고양이를 인식하는 것은 상당히 어려운 일이며, 이것을 바로 의미론적인 차이(semantic gap )라고 한다.

 

고양이라는 레이블은 우리가 이 이미지에 붙힌 의미상의 레이블이다.

이미지가 고양이 사진이라는 사실과 컴퓨터가 보는 픽셀값과에는 큰 차이가 있다.

이미지에 아주 미묘한 변화만 주더라도, 카메라를 아주 조금만 옆으로 옮겨도 모든 픽셀값은 변하지만 고양이라는 사실은 변하지 않는다.(viewpoint variation)

바라보는 방향 뿐만 아니라 조명 또한 문제가 될 수 있다.(illumination)

어떤 장면이냐에 따라 조명은 각양각색이지만 고양이가 어두운 곳에 있든 밝은 곳에 있든 고양이라고 인식할 수 있어야 한다.

고양이가 다양한 자세를 취할 수도 있고 (deformation), 이미지에서 고양이의 일부분이 가려져 있을 수도 있다 (occlusion).고양이의 얼굴이나 꼬리와 같은 일부분만 보고도 고양이라는 것을 인지해야한다.

고양이가 배경과 비슷한 경우 (background cluster)도 있으며 고양이라는 하나의 클래스에도 다양성이 존재한다intraclass variation). 고양이라는 하나의 개념으로 모든 고양이의 다양한 모습을 전부 소화해내야 한다.

 

알고리즘은 이러한 다양성들 다룰 수 있어야 한다.

하지만 이런 것들을 위한 직관적이고 명시적인 알고리즘은 존재하지 않는다.

사람들은 동물들을 인식하기 위해 고급 codedrules를 만들고자 했다.

이미지에서 edges를 계산하고 다양한 corners와 edges를 각 카테고리로 분류하는 방식을 생각했다.

 

하지만 명시적인 규칙 집합을 써내려가는 방법 은 잘 동작하지 않는다.

첫번째 문제는 다양성에 강인하지 못하기 때문이고, 두번째는 또 다른 객체를 인식하는 알고리즘은 다시 별도로 만들어야하기 때문이다.

이 세상에 존재하는 다양한 객체들에게 유연하게 적용가능한, 확작성있는 알고리즘이 필요했다.

데이터중심 접근방법 data-driven approach은 어떤 규칙을 직접 쓰는 대신 많은 데이터를 수집하는 방식이다.

이 데이터셋들을 이용해서 machine learning claassifier를 학습시킬 수 있다.

ml 알고리즘은 어떤 식으로든 데이터를 잘 요약하여 다양한 객체들을 인식할 수 있는 모델을 만들어낸다.

 

이 방식에서는 함수 1개가 아니라 2개가 필요하다.

train 함수는 이미지를 입력받아 우리의 모델을 출력하며, predict 함수는 모델을 입력받아 이미지의 최종 예측값을 출력한다.

 

machine learningㅡ이 key insight

이 쉉ㅂ에서느 ㄴ주로 neural network cnn deep learning

단순한 classifier

train에서는 아무일도 ㅎ지않음 단지 모든 학습데이터를 기억함

predict에서는 새로운 이미지가 들어오면 기존 이미지와 비교해서 가장 유사한 이미지로 label을 예측함

cifar10

10개의 클래스 ㅈ존재 비행기 자동차 새 고양이 등

50000여개의 데이터가 각 카테고리에 균일하게 분포됨

알고리즘 테스트용 10000개

cifar10을 이용한 nn

오른쪽 칸의 맨 왼쪽 열은 test 이미지

오른쪽 방향으로는 학습 이미지 중 테스트 이미지와 유사한 순으로 정렬

이미지에 nn 알고리즘을 적용하면 트레이닝 셋에서 가장 가까운 샘플을 찾게 됨

중요한 점은 이미지 쌍이 있을 떄 어떻게 비교를 할 것인가

여러 비교 방법이 존재

어떤 비교 함수를 사용할까?

앞선 예제에서는 l1 distawnce사용

mangattan distance

L1 dist

이미지를 pixel-wise로 비교한다

4*4 테스트 이미지가 있을때 테스트 트레이ㅣㄴㅇ 이미지의 같은 자리의 픽셀을 서로 빼고 절댓값을 취함

이렇게 픽셀 간의 차이 값을 계산하고 모든 픽셀의 수행 결과를 모두 더한다

이 이미지의 경우 456정도 차이남

nearest neighbor classifier의 코드는 간단함

numpy에서 제공하는 vectorized opertions를 이용했기 때문

train함수가 간단

단지 학습데이터를 기억

test에서는 이미지를 입력으로 받고 l1 distance로 비교

학습 데이터들 중 테스트 이미지와 가장 유사한 이미지를 찾아냄

→ 첫 과제에 있음

첫번째 질문

trainset의 이미지가 총n개라면 tran/test함수의 속도는 어떻게 될까?

→ train O(1) 이미지를 기억하기만 하면 됨 포인터를 잘 사용해서 복사를 하면 데이터 크기와 상관없이 상수시간으로 끝마칠 수 있음

→ test O(N) 학습 데이터 전부를 테스트 이미지와 비교해야 한다 상당히 느린 작업

이건 뒤집어졌다 train time < test time backwards

실제로 우리는 훈련 시간은 조금 느려도 되지만 test time은 빠르게 동작하기 루언한다

이 모델이 핸드폰 브라우저 등 low power device에서 동작해야할 수 있다

이런 상황에서는 classifier가 test time에서 어느정도 빠른 성능을 보장해ㅑㅇ할 것이다

그런 관점에서 nn알고리즘은 정 반대의 경우다

cnn같은parameric model들은 nn과는 정반대이다

train은 오래걸릴 수 있찌만 테스트는 빠름

nn의 decision regions

2차원 평면 상의 각 점은 학습 데이터

점의 색은 클래스 레이블

5개의 클래스

2차원 평면 내의 모든 좌표에서 각 좌표가 어떤 학습 데이터와 가장 가까운지 계산

nn분류기는 공간을 나눠서 각 레이블로 분류

하지만 이 분류기는 그닥 좋지 않음

이 그림을 보면 발생 가능한 문제를 볼 수 있음가려 ㅇ가운데르 ㄹ보며 ㄴ대부분이 초록색 점인데 가운데 노란 점이 끼어있음

가장 가까운 이웃만 보기 때문에 발생한 일

사실은 노란색이 아니라 초록색 영역이어야 함

유사하게 초록색 영역이 파란색 영역을 침범하고 있음

이 점은 noise(잡음)이거나 spurious(가짜)일 것

이러한 문제들이 발생하기 때문에 nn의 조금 더 일반화된 버전인 k-nn 알고리즘이 탄생함

distance metric을 이용해서 가까운 이웃을 k개의 만큼 찾고 이웃끼리 투표를 하는 방법

그리고 가장 많은 득표수를 획득한 레이블로 예측한다

투표를 하는 다양하고 복잡한 방법 존재 거리별 가중치를 고려하는 등

하지만 가장 잘 동작하면서도 가장 쉬운 방법은 득표수만 고려하는 방법

세 예제는 동일한 데이터를 사용한 k-nn 분류기들

3인 경우앞ㅇ서 초록색 여역에 있던 노란색 점 댸문에 생긴 노란 지역이 없어짐

빨강 파랑 사이의 뾰족한 경계들도 점차 부드러워지고 있음

5인 경우 파란 빨간 영역의 경계가 아주 부드럽고 좋아졌다

k는 적어도 1보다 큰 값으로 사용

그래야 결정 경계가 부드러워지고 좋은 결과를 만듦

레이블링이 안된 흰 색 지역은 어떻게 처리?

k-nn이 대다수를 결정할 수 없는 지역

흰색 영역을 메꿀 수 있는 좋은 방법들도 있음

어떤 식으로든 추론을 하던가 임의로 정할 수 있음

하지만 여기에서는 가장 가까운 이웃이 존재하지 않으면 단순하게 흰색으로 칠함

컴퓨터 비전을 공부하는 동안 다양한 관점을 유연하게 다루는 능력은 매우 유용함

하나는 이미지를 고차원 공간에 존재하는 하나의 점이라고 생각하는 섯

반대로 이미지를 이미지 자체로 볼 수도 있음

이미지의 픽셀들을 하나의 고차원 ㅂ겍터로 생각하는 관점

이 두 관점을 자유롭게 오갈 수 있는 능력은 아주 유용하다

이미지르 ㄹ다루는 문제에서 k-nn을 사용하는 전략은 그닥 좋지 않음 성능이 별로 안좋음

잘 분류됐으면 초록색 아니면 빨간색

k값을 높이거나 가장 가까운 이웃 뿐만 아니라 top-3/top5 혹은 모든 행을 사용하면 어떨까?

더 많은 이웃들이 투표에 참여하면 각종 noise들에 조금 더 강인해질 것임을 추측할 수 있다

k-nn을 사용할 때 결정해햐 할 한가지 사항이 더 있음

바로 서로 다른 점들을 어떻게 비교할 것인지

지금까지는 l1 distance를 이용 - 픽셀 간 차이 절대값의 합

하지만 l2, 즉 euclidean distacne를 사용해도 된다

제곱 합의 제곱근을 거리로 이용하는 방법

어떤 거리 척도 distance metric을 선택할지는 아주 흥미로운 주제이다

왜냐하면 서로 다른 척도에서는 해당 공간의 근복적인 기하학적 구조 자체가 서로 다르기 떄문이다

왼쪽에 보이는 사각형은 사실 l1 distance의 관점에서는 원이다 생긴 모습은 원점을 기준으로하는 사각형의 모양

하지만 l1 의 관점에서는 사각형 위의 점들이 모두 원점으로부터 동일한 거리만큼 떨어져있다

l2에서는 원

이 ㅜ가지 거리 척도간에는 흥미로우 ㄴ차이점 존재

l1은 어떤 좌표 시스템이냐에 따라 많은 영향을 받음

예를 들어 l1은 기존의 좌표겨ㅖ를 회전시키면 변함

반면 l2는 좌표계와 아무 연관이 없다

만약 특징 벡터의 각각ㄱ 요소들이 개별적인 의미를 갖고 있다면 키 몸무게 등

l1이 더 잘 어울리 수 잇ㅇㅁ

하지만 특징 벡터가 일반적인 벡터이고 요소들간의 실질적인 의미를 잘 모르는 경우라면 아마도 l2가 더 잘 어울릴 수 있다

k-nn에 다양한 거리 척도를 적용하면 k-nn으로 다양한 종류의 데이터를 다룰 수 있음

벡터나 이미지 외에도

가령 문장을 분류하는 문제가 있다고 하자

k-nn으로 이 문제를 다루려면 어떠 ㄴ거리 척도를 사용할지만 정해주면 된다

두 문장 간의 거리를 측정할 수 있는 어떤 것이든 사용

거리 척도만 정해주면 어떤 종류의 데이터도 다룰 수 있음

어떤 거리 척도를 사용하는지에 따라서 실제 기하학적으로 어떻게 변하는지 알아보자

양 쪽 모두 동일한 데이터 왼쪽으 1 오른쪽은 ㅣ2

결과를 보면 거리 척도에 따라 결정 경계의 모양 자체가 달라짐을 알 수 있음

l1의 경우 결정 경게가 좌표 축에 영향을 받는 경향을 알 수 있다

반면 l2는 좌표 축의 영향을 받지 않고 결정 경계를 만들기 때문에 조금 더 자연스럽다

웹 데모에서 k와 척도를 바꿔보며 어떻게 결정 경계가 만들어지느 ㄴ지에 대한 직관을 얻길 바람

k-nn을 사용하려면 반드시 선택해야 하는 몇가지 항목이 이씅

ㅁk

거리척도

그렇다며 ㄴ어떻게 하면 내 문제와 데이터에 꼭 맞는 모델을 찾을 수 있으띾요?

k와 거리척도를 하이퍼파라미터라고 한다

train time에 학습하는 것이 아니므로

여러분이 학습 전 ㅏ전에 반드시 선택해야 한다

데이터로 직접 학습시킬 방법이 없음

그렇다면 하이퍼파라미터르 ㄹ어떻게 정해야할 까?

문제의존적

가장 간단한 방법은 데이터에 맞게 다양한 값을 시도해보고 가장 좋은 값을 차즌다

어떠 ㄴ경우에 l1 보다 l2가 더 좋은지

l1은 좌표계에 의존적이므로 데이터가 좌표계에 의존적인지를 판단하는 것이 판단 기준이 될 수 있다

여러분에게 어떤 특징 벡터가 있고 각 요소가 어떤 특별한 의미를 지니고 있다면

예를들어 직원ㄷ르을 분류하는 문제에서 봉급 근속년수와 같은 데이터의 요소가 직원들의 특징에 영향을 줄 수 있다

이처러 ㅁ각 요소가 특별한 의미를 갖고 있다면 l1을 사용하는 것이 더 좋을 수 있다

하지마 ㄴ하이퍼파라미터 선택은 어떤 문제와 데이터인지에 의존적

여러 가지 시도를 해보고 좋은 것을 선택하는 것이 중요

하이퍼파라미터 값들을 실험해보는 작업

  • 다양한 하이퍼 파라미터 를 시도해보는 것
  • 그중최고를 선택하는 것

학습데이터의 정확도와 성능을 최대화하는 하이퍼파라미터를 선택

끔찍한 방법

가령 nn분류기의 경우 k=1일때 학습데이터를 가장 완벽하게 분류함

트레이닝 정확도를 올리려면

하지만 앞서 예제에서도 보았들시 k값을 올릴 떄 학습 데이터에 없던 데이터에 대해서 더 좋은 성능을 보일 수 있음

궁극적으로 기계학습에서는 학습 데이터를 얼마나 잘 맞추는지는 중요하지 않다

우리가 학습시킨 분류기가 한번도 보지 못한 데이터를 얼마나 잘 예측하는 가가 중요

또 다른 아이디어는 전체 데이터셋중 학습데이터와 테스트 데이터로 쪼개서 사용하는 것

학습 데이터로 다양한 하이퍼파라미터 값들을 학습시키고 테스트 데이터에 적용한 다음 하이퍼파라미터 선택

조금 더 합리적 하지만 끔찍한 방법

한번도 보지 못한 데이터에서의 알고리즘 성능을 측정할 수 있어야 함

테스트 셋에서만 잘 동작하는 하이퍼파라미터를 구하게 됨

한 번도 보지못한 데이터에서는 잘 동작하지 못할 수 있음

훨씬 더 일반적인 방버은

train validation test로 나누는 것

다양한 하이퍼파라미터로 트레이닝셋을 학습 벨리데이션셋으로 검증

벨리데이션 셋에서 가장 좋은 파라미터 선택

가장 좋았던 분류기로 테스트 셋에서 성능 측정

연구 논문을 작성할 떄 테스트 셋을 거의 마지막 쯤에야 한 번 사용함

2와 3의 차이가 뭘까?아직 직관적으로 와닿지 않음

그리고 요즘은 왜 validation을 잘 안할까?

또 다른 하이퍼 파라미터 선택 전략은 크로스 벨리데이션 (교차 검증)

이 방법은 작은 데이터셋일 경우 많이 사용하고 딥러닝에서는 잘 사용하지 않ㅇㅁ → 왜?

테스트 데이터를 정해놓고

나머지는 데이터는 트레이닝 데이터를 여러 부분으로 나누고 벨리데이션 셋을 번갈아가면서 지정한다

5-fild crooss calidaiotn

ㅊ어므 4개의 fild에서 학습 5에서 평가

1,2,3,5에서 학습 4에서 vudrk

이런 방식은 거의 표준이기는 하지만 실제로는 딥러닝같은 큰 모델을 학습시킬때는 학습 자체가 계산량이 많기 떄문에 실제로는 잘 쓰지 않음 →아하…

트레이닝셋과 벨리데이션 셋의 차이

트레이니 ㅇ셋은 우리가 레이블을 기억하고 있는 이미지들

트레이니 ㅇ셋의 레이블을 볼 수 있지만 벨리데이션 셋의 레이블은 볼 수 없다

벨리데이션 셋의 레이블은 알고리즘이 얼마나 잘 동작하는지 확인할때만 사용

테스트 셋이 한 번도 보지 못한 데이터를 대표할 수 있는지

기본적이 통계학적 가정이 하나있음

여러분의 데이터는 독립적이며 유잉ㄹ한 하나의 분포에서 나온다는 가정i.i.d assumption

모든 데이터는 동일한 분포를 따른다고 생각

물론 실제로는 그렇지 않은 경우가 ㅁ낳음

테스트 셋이 한번도 보지못한 데이터를 잘표현하지 못하는 경우를 경험하게 될것

dataset creator가 curator가 생각해볼 문제

일관된 방법으로 모은 데이터셋을 무작위로 섞어서 나누느 것이 문제를 완화시키는 방법중 하나

크로스 벨리데이션ㅇ 수행하고 다음과 같은 그래프를 볼 수 이승ㅁ x축은 k-nn의 k이고y축은 분류 정확도이다

5-fold 사용

각 k마다 5번의 크로스 벨리데이션을 통해 알고리즘이 얼마나 잘 동작하는지를 알려준다

테스트셋이 알고리즘 성능 향상에 미치는 영향을 알아보려면 k fold cv가 도움을 줄 수 있음

여러 validation folds별 성능의 분산을 고려해볼 수 있다

분산을 같이 계산하게 되면 어떤 하이퍼파라미터가 가장 좋은지 뿐만 아니라(k값) 그 성능의 분산도 알 수 있다

기계학습 모델을 학습시키는 경우에 이런 그래프를 그림

ㅎㅏ이퍼파라미터에 따라 모델의 정확도와 성능을 평가할 수 있다

그리고 벨리데이션 셋의 성느이 최대인 하이퍼 파라미터를 선택하게 되러 것

여기서는 k=7일때 가장 좋은 성능을 보임

실제로는 입력이 임지인 경우 k-nn을 잘 사용하지 않음

  1. 너무 느림
  2. l1, l2 distance가 이미지간의 거리를 측정하기에 적절하지 않음

이미지들 간의 지각적 유사성을 측정하는 척도로는 적절하지 않음

오른쪽 사진들은 원본을 변형한 사진들

눈과 입으 ㄹ가리고

픽셀식 이동도 시켜보고

전체 이미지의 파란색 색조도 추가

하지만 각 이미지와 우너본 사이의 l2 dist를 측정햇을때

읻르은 모두 동일한 l2 값을 가짐 좋지 않은 현상 (그냥 그렇게 만들었대)

따라서 서로 다른 다양한 이미지들이 (레이블이 같지 않은) 가틍ㄴ distance값을 가질 수 있따는 것을 의미

l2가 이미지들간의 지각적 유사도를 측정하기에는 적합하지 않다는 의미 잘 포착하지 못함

  1. 차원의 저주

k-nn이 하는 일은 트레이닝 데이터를 이용해서 공간을 분할하는 일이다

이는 k-nn이 잘 동작하려면 전체 공간을 조밀하게 커버할 만큼의 충분한 트레이닝 샘플이 필요하다는 것을 의미

그렇지 않다면 이웃이 사실 엄청 멀 수도 있고 테스트 이미지를 제대로 분류할 수 없을 것

공간을 조밀하게 덮으려면 충분한 량의 학습 데이터가 필요하고 그 양은 차원이 증가함에 따라 기하급수적으로 증가 아주 좋지 안은 현상

고차원의 이미지라면 모든 공간을 조밀하게 메울 수 있는 만큼의 데이터를 모으는 것은 불가능하다

2차원에는 커브 모양이 있음

더 높은 차원에서는 일종의 샘플ㄷ르의 manifolds가 존재할 수있

하지만 k-nnn알고리즘은 샘플들의 manifolds글 가정하고 있지 않기 때문에 제대로 동작할 수 있는 유일한 방법은 충분히 많은 트레이닝 데이터를 확보하는 것이ㅏㄷ

이미지와 정답 레이블이 있는 트레이닝 셋이 있엇고 테스트 셋을 예측하는 데 이용

첫 과제 k-nn 실습

최적의 하이퍼파라미터를 찾을 떄까지 학습을 다시 시키는 것이 흔한 방법인디

Linear classification

아주 간단한 알고리즘이지만 neural network와 cnn의 기반이 되는 알고리즘

일부 사람들은 neural network을 레고블럭에 비유함

nn을 구축할때 다양한 컴포넌트를 사용

cnn이라는 거대한 타워를 지을 수 잇게됨

앞으로 보게 될 다양한 종류의 딥러닝 알고리즘들의 가장 기본이 되는 블럭 중 하나가 바로 linear classifier

따라서 이게 어떻게 동작하는 지 이해하는 것은 매우 중요함

cifar10

32*32 픽셀을 가진 3채널 컬러이미지

50000장

parametric model의 가장 단순한 형태

pm에는 두개의 요소가 있음

입력이미지 x

가중치 파라미터 w theta

함수는 data X와 parameter W를 가지고 10개의 숫자를 출력

이 숫자는 cifar10의 각 10개의 카테고리의 스코어

스코어가 높다는 것은 입력 x가 해당 클래스일 확률이 높다는 것을 의미

k-nn은 파라미터가 없었음

그저 전체 트레이닝 셋을 가지고 있고 모든 트레이닝 셋을 test에 사용

하지만 parametric approach에서는 트레이닝 데이터의 정보를 요약

그 요약된 정보를 파라미터 W에 모아준다

이런 방식을 사용하면 test time에서 더이사 ㅇ트레이닝 데이터가 필요하지 않음

파라미터 w만 있으면 됨

이방법은 핸드폰과 같은 작은 디자이스에서 모델을 동작시켜야 할 때 아주 효율적이다

딥러닝은 이 함수 f의 구조를 적절하게 잘 설계하는 일

어떤 식으로 가중치와 데이터를 조합할 지 여러가지 복잡한 방법을 고려

이과ㅓㅇ들이 모두 다양한 nn아키텍처를 설계하는 과정

가장 간단한 조합 방법이 x와w를 곱하는 것

그것이 linear classification

F(x,W)=Wx

행렬과 ㅂ게곱

입력 이미지ㅏㄱ 32323이였기 때문에 이 값을 길게 펴서 열 벡터로 만들면 3072*1 벡터가 됨

3072dim 열 벡터가 10 classes score가 되어야 함

이는 10개의 카테고리에 해당하는 각 스코어를 얻고 싶은 것

따라서 행렬 W는 10*3072가 되어야 함

bias term은 10-dim 열 벡터

입력과 직접 연결되지 않음

데이터와 무관하게 특정 클래스에 우선권을 부여

가령 데잍셋이 불균형한 상황

고양이가 강아지보다 많음

이 상황에서는 고양이 클래스에 상응하는 바이어스가 더 커지게 된다(?)

2*2이미지가 있을 때 linear classifier는 이 이미지를 입력으로 받아 4-dim 열 벡터로 쭉 편다

class가 3개라면 가중치 행렬 W는 3*4행렬이 됨 →잘못말하신것맞쥐..

bias는 3-dim 열 벡터 데이터와 독립적으로 각 카테고리에 연결됨

고양이 스코어는 입력 이미지의 픽셀값들과 가중치 행렬을 내적한 값에 bias term을 더하ㅏㄴ 것

이러한 관점에서 linera classifiacation은 템플릿 매칭과 거의 유사하다

W의 각 행은 각 이미지에 대한 템플릿으로 볼 수 있고 그 행 벡터와 ㅇ미ㅣ지의 열벡터간의 내적을 계산하는데

여기서 내적이란 결국 클래스 간 탬플릿의 유사도를 측정하는 것과 유사함을 알 수 있다

bias는 데이터 독립적으로 각 클래스ㅔ scailing offsets을 더해주는 것

템플릿 매칭 관점에서 linear classification을 해석해 보면 가중치 w의 한 행을 뽑아서 이를 이미지로 시각화 시켜보면

linear classifier가 이미지 데이터를 인식하ㅣㄱ ㅜ이해 어떤 일을 하는지 짐작해볼 수 있음

슬라이드 하단의 이미지는 실제로 가중치 행렬이 어떻게 학습된느지를 볼 수 있음

cifar10이 가가 10개의 카테고리에 대핟ㅇ하는 행 벡터를 시각화한것

예를 들어 가장 맨 ㅚㄴ쪽에 이쓴 ㄴ사진으 비행기를 학습한 것인데

전반적으로 파란 색이고 가운데 어떤 물체가 있는 것 같음

분류할 때 이러한 특징을 사용

하지만 이러한 그림들은 실제와 거리가 있다

linear classifier의 문제 중 하나느 ㄴ각 클래스에 대해서 단 하나의 템플릿만을 학습한다는 것이다

한 클래스 내에 다양한 특징들이 존재할 수 있지만 모든 것들을 평균화 시키기 때문에 다양한 모습들이 있더라도 각 카테고리를 인식하기 위한 템플릿은 단 하나박에 없음

말 사진에서도 이 문제점이 확실하게 드러남

바닥이 푸르스름해 보임

보통 말이 풀밭에 서있으니 템플릿이 바닥을 푸르스름하게 학습한 것

또 유심히 살펴보면 말의 머리가 두 개임

linear classifier가 클래스 당 하나의 템플릿밖에 허용하지 않으므로 이 방법이 최선이다

하지만 neural network같은 복잡한 모델이라면 조금 더 정확도 높은 결과를 볼 수 잇을 것

클래스 당 하나의 템플릿만 학습할 수 있다는 것과 같은 제약조건이 없다면 말이다

linear classifier을 또 다른 관점으로 해석할 수 있따

이미지를 고차원 공간의 한 점으로 보는 것이ㅏㄷ

linear classifier는 가 ㄱ클래스를 구분시켜 주는 선형 결정 경계를 그어주는 역할을 한다

하지만 이미지가 고차원 공간의 하나의 점이라는 관점으로 해석해보면

linear classifiacation이 직면할 수 있는 문제가 있다

이런 경우의 데이터들을 선 하나로 분류할 방법은 없음

linera classifier로 해결하기 어려움

첫번째 경우는 파란색이 0보다 큰 픽셀이 홀수개인 경우 빨간색은 0보다 큰 픽셀이 짝수개인 경우

ex [3,-1]이면 0보다 큰 수는 3 하나 박에 없음 → 홀수개 → 파랑

가령 이렇게 픽셀 개수를 세는 대신에 영상 내 동물이나 사람의 수가 홀/짝수인지를 분류하는 문제일 수 있음

홀/짝수를 분류하는 것과 같은 반전성 문제 parity problem는 일반적으로 linar classification으로 풀기 어려움

또 linear classifier로 풀기 힘든 문제는 맨 오른쪽의 multimodal problem

파란색이 분포하는 세 개의 섬들이 있음

앞서 소개한 말의 예시처럼 이런 문제는 언제든 실제로 일어날 수 있다

왼쪽 머리가 하나의 섬이 될 수 있고 오른쪽 머리가 또 하나의 섬이 될 수 있따

이때 섬이 두개인데 선을 하나만 긋는 것은 그닥 좋은 방법이 아니다

multimodal data라면 한 클래스가 다양한 공간에 분포할 수 있으며 이 문제는 linear classifier로 풀 수 없다

오늘은 어떻게 가중치 행렬 w를 구할 수있는지는 배우지 않음

이미지르 ㄹ입력으로 받음

시스템에는 미리정해져 있는 카테고리 집합이 있음

개 고ㅑㅇ이 트럭 비해익 등

컴퓨터는 이미지를 보고 어떤 카테고리에 속할지 고르는 것

컴퓨터에게 이미지느 아주 큰 격자모양의 숫자집합 800*600

각 픽셀은 세 개의 숫자로 표현 rgb값을 의미

이 거대한 숫자 집합에서 고양이르 ㄹ인식하는 것은 상당히 어려움

이것을 바로 의미론적인 차이라고 한다 semantiv gap

고양이 라는 레이블은 우리가 이 이미지에 붙힌 의미상의 레이블이다

이미지가 고양이 사진이라는 사실과 컴퓨터가 보는 피셀값과는 큰 차이가 있음

저암ㄹ 어려운 태스크

이미지에 아주 미묘하 ㄴ변화만 주더라도 픽셀값은 전부 변함

카메라를 아주 조금만 옆으로 옮겨도 모든 픽셀값은 변하지만 고양이라는 사실은 변하지 않음

우리가 만든 알고리즘은 이런 것들에 강인해야한다

viewpoint variation

바라보는 방향 뿐만 아니라 조명 또한 문제가 될 수 있다

어떤 장면이냐에 따라 조명은 각양각색

고양이가 어두운 곳에 있던 밝은 곳에 있던 고양이

이것에도 알고리즘이 강하다

또 다양한 자세를 취할 수 있음 deformation

가려짐 occlusion고양이의 얼굴 꼬리 또는 부분만 보고도 고양ㅇ라는 것을 인지해야함

background cluster 배경과 비슷한 경우

intraclass variation 하나의 클래스에도 다양성이 존재 고양이라는 하나의 개념으로 모든 고양이의 다양한 모습을 전부 소화해내야함

고야잉에 따라 생김새 크기 색 다양함

알고리즘은 이런 다양성도 다룰 수 있어야 한다

직관적이고 명시적인 알고리즘이 존재하지 않음

사람들이 동물들을 인식하기위해 고급 codedrules를 만들고자 했음

고양이가 두개의 귀와 하나의 코가 존재

edges가 중요

이미지에서 edges를 계산하고 다양한 corners와 edges를 각 카테고리로 분류

고양이 인식을 위해 명시적인 규칙 집합을 써내려가는 방법

하지만 이런 방식은 잘 동작하지 않음

한 가지 문제는 강인하지 못함 brutal

두번째는 또다른 객체를 인식해야한다면 별도로 만들어야함

확장성이 전혀 없음

이 세상에 존자ㅐ하는 다양한 객체들에게 유연하게 적용가능한 확장ㅇ서잉쓴 알고리즘 필요

데이터중심 접근방법 data-driven approach

어떠 ㄴ규칙을 직접 쓰는 대신 많은 데이터를 수집

이 데이터셋들을 이용해서 machine learning claassifier를 학습시킬 수 있음

ml 알고리즘은 어떤 식으로든 데이터를 잘 요양ㄱ해서 다양한 객체들을 인식할 수 있는 모델을 만들어낸다

api가 변경됨

함수 1개가 아니라 2개가 필요

하나는 train: 입력은 이밎와 레이블 출력은 우리의 모델

predict입력이 모델 출력은 이미지의 예측값

machine learningㅡ이 key insight

이 쉉ㅂ에서느 ㄴ주로 neural network cnn deep learning

단순한 classifier

train에서는 아무일도 ㅎ지않음 단지 모든 학습데이터를 기억함

predict에서는 새로운 이미지가 들어오면 기존 이미지와 비교해서 가장 유사한 이미지로 label을 예측함

cifar10

10개의 클래스 ㅈ존재 비행기 자동차 새 고양이 등

50000여개의 데이터가 각 카테고리에 균일하게 분포됨

알고리즘 테스트용 10000개

cifar10을 이용한 nn

오른쪽 칸의 맨 왼쪽 열은 test 이미지

오른쪽 방향으로는 학습 이미지 중 테스트 이미지와 유사한 순으로 정렬

이미지에 nn 알고리즘을 적용하면 트레이닝 셋에서 가장 가까운 샘플을 찾게 됨

중요한 점은 이미지 쌍이 있을 떄 어떻게 비교를 할 것인가

여러 비교 방법이 존재

어떤 비교 함수를 사용할까?

앞선 예제에서는 l1 distawnce사용

mangattan distance

L1 dist

이미지를 pixel-wise로 비교한다

4*4 테스트 이미지가 있을때 테스트 트레이ㅣㄴㅇ 이미지의 같은 자리의 픽셀을 서로 빼고 절댓값을 취함

이렇게 픽셀 간의 차이 값을 계산하고 모든 픽셀의 수행 결과를 모두 더한다

이 이미지의 경우 456정도 차이남

nearest neighbor classifier의 코드는 간단함

numpy에서 제공하는 vectorized opertions를 이용했기 때문

train함수가 간단

단지 학습데이터를 기억

test에서는 이미지를 입력으로 받고 l1 distance로 비교

학습 데이터들 중 테스트 이미지와 가장 유사한 이미지를 찾아냄

→ 첫 과제에 있음

첫번째 질문

trainset의 이미지가 총n개라면 tran/test함수의 속도는 어떻게 될까?

→ train O(1) 이미지를 기억하기만 하면 됨 포인터를 잘 사용해서 복사를 하면 데이터 크기와 상관없이 상수시간으로 끝마칠 수 있음

→ test O(N) 학습 데이터 전부를 테스트 이미지와 비교해야 한다 상당히 느린 작업

이건 뒤집어졌다 train time < test time backwards

실제로 우리는 훈련 시간은 조금 느려도 되지만 test time은 빠르게 동작하기 루언한다

이 모델이 핸드폰 브라우저 등 low power device에서 동작해야할 수 있다

이런 상황에서는 classifier가 test time에서 어느정도 빠른 성능을 보장해ㅑㅇ할 것이다

그런 관점에서 nn알고리즘은 정 반대의 경우다

cnn같은parameric model들은 nn과는 정반대이다

train은 오래걸릴 수 있찌만 테스트는 빠름

nn의 decision regions

2차원 평면 상의 각 점은 학습 데이터

점의 색은 클래스 레이블

5개의 클래스

2차원 평면 내의 모든 좌표에서 각 좌표가 어떤 학습 데이터와 가장 가까운지 계산

nn분류기는 공간을 나눠서 각 레이블로 분류

하지만 이 분류기는 그닥 좋지 않음

이 그림을 보면 발생 가능한 문제를 볼 수 있음가려 ㅇ가운데르 ㄹ보며 ㄴ대부분이 초록색 점인데 가운데 노란 점이 끼어있음

가장 가까운 이웃만 보기 때문에 발생한 일

사실은 노란색이 아니라 초록색 영역이어야 함

유사하게 초록색 영역이 파란색 영역을 침범하고 있음

이 점은 noise(잡음)이거나 spurious(가짜)일 것

이러한 문제들이 발생하기 때문에 nn의 조금 더 일반화된 버전인 k-nn 알고리즘이 탄생함

distance metric을 이용해서 가까운 이웃을 k개의 만큼 찾고 이웃끼리 투표를 하는 방법

그리고 가장 많은 득표수를 획득한 레이블로 예측한다

투표를 하는 다양하고 복잡한 방법 존재 거리별 가중치를 고려하는 등

하지만 가장 잘 동작하면서도 가장 쉬운 방법은 득표수만 고려하는 방법

세 예제는 동일한 데이터를 사용한 k-nn 분류기들

3인 경우앞ㅇ서 초록색 여역에 있던 노란색 점 댸문에 생긴 노란 지역이 없어짐

빨강 파랑 사이의 뾰족한 경계들도 점차 부드러워지고 있음

5인 경우 파란 빨간 영역의 경계가 아주 부드럽고 좋아졌다

k는 적어도 1보다 큰 값으로 사용

그래야 결정 경계가 부드러워지고 좋은 결과를 만듦

레이블링이 안된 흰 색 지역은 어떻게 처리?

k-nn이 대다수를 결정할 수 없는 지역

흰색 영역을 메꿀 수 있는 좋은 방법들도 있음

어떤 식으로든 추론을 하던가 임의로 정할 수 있음

하지만 여기에서는 가장 가까운 이웃이 존재하지 않으면 단순하게 흰색으로 칠함

컴퓨터 비전을 공부하는 동안 다양한 관점을 유연하게 다루는 능력은 매우 유용함

하나는 이미지를 고차원 공간에 존재하는 하나의 점이라고 생각하는 섯

반대로 이미지를 이미지 자체로 볼 수도 있음

이미지의 픽셀들을 하나의 고차원 ㅂ겍터로 생각하는 관점

이 두 관점을 자유롭게 오갈 수 있는 능력은 아주 유용하다

이미지르 ㄹ다루는 문제에서 k-nn을 사용하는 전략은 그닥 좋지 않음 성능이 별로 안좋음

잘 분류됐으면 초록색 아니면 빨간색

k값을 높이거나 가장 가까운 이웃 뿐만 아니라 top-3/top5 혹은 모든 행을 사용하면 어떨까?

더 많은 이웃들이 투표에 참여하면 각종 noise들에 조금 더 강인해질 것임을 추측할 수 있다

k-nn을 사용할 때 결정해햐 할 한가지 사항이 더 있음

바로 서로 다른 점들을 어떻게 비교할 것인지

지금까지는 l1 distance를 이용 - 픽셀 간 차이 절대값의 합

하지만 l2, 즉 euclidean distacne를 사용해도 된다

제곱 합의 제곱근을 거리로 이용하는 방법

어떤 거리 척도 distance metric을 선택할지는 아주 흥미로운 주제이다

왜냐하면 서로 다른 척도에서는 해당 공간의 근복적인 기하학적 구조 자체가 서로 다르기 떄문이다

왼쪽에 보이는 사각형은 사실 l1 distance의 관점에서는 원이다 생긴 모습은 원점을 기준으로하는 사각형의 모양

하지만 l1 의 관점에서는 사각형 위의 점들이 모두 원점으로부터 동일한 거리만큼 떨어져있다

l2에서는 원

이 ㅜ가지 거리 척도간에는 흥미로우 ㄴ차이점 존재

l1은 어떤 좌표 시스템이냐에 따라 많은 영향을 받음

예를 들어 l1은 기존의 좌표겨ㅖ를 회전시키면 변함

반면 l2는 좌표계와 아무 연관이 없다

만약 특징 벡터의 각각ㄱ 요소들이 개별적인 의미를 갖고 있다면 키 몸무게 등

l1이 더 잘 어울리 수 잇ㅇㅁ

하지만 특징 벡터가 일반적인 벡터이고 요소들간의 실질적인 의미를 잘 모르는 경우라면 아마도 l2가 더 잘 어울릴 수 있다

k-nn에 다양한 거리 척도를 적용하면 k-nn으로 다양한 종류의 데이터를 다룰 수 있음

벡터나 이미지 외에도

가령 문장을 분류하는 문제가 있다고 하자

k-nn으로 이 문제를 다루려면 어떠 ㄴ거리 척도를 사용할지만 정해주면 된다

두 문장 간의 거리를 측정할 수 있는 어떤 것이든 사용

거리 척도만 정해주면 어떤 종류의 데이터도 다룰 수 있음

어떤 거리 척도를 사용하는지에 따라서 실제 기하학적으로 어떻게 변하는지 알아보자

양 쪽 모두 동일한 데이터 왼쪽으 1 오른쪽은 ㅣ2

결과를 보면 거리 척도에 따라 결정 경계의 모양 자체가 달라짐을 알 수 있음

l1의 경우 결정 경게가 좌표 축에 영향을 받는 경향을 알 수 있다

반면 l2는 좌표 축의 영향을 받지 않고 결정 경계를 만들기 때문에 조금 더 자연스럽다

웹 데모에서 k와 척도를 바꿔보며 어떻게 결정 경계가 만들어지느 ㄴ지에 대한 직관을 얻길 바람

k-nn을 사용하려면 반드시 선택해야 하는 몇가지 항목이 이씅

ㅁk

거리척도

그렇다며 ㄴ어떻게 하면 내 문제와 데이터에 꼭 맞는 모델을 찾을 수 있으띾요?

k와 거리척도를 하이퍼파라미터라고 한다

train time에 학습하는 것이 아니므로

여러분이 학습 전 ㅏ전에 반드시 선택해야 한다

데이터로 직접 학습시킬 방법이 없음

그렇다면 하이퍼파라미터르 ㄹ어떻게 정해야할 까?

문제의존적

가장 간단한 방법은 데이터에 맞게 다양한 값을 시도해보고 가장 좋은 값을 차즌다

어떠 ㄴ경우에 l1 보다 l2가 더 좋은지

l1은 좌표계에 의존적이므로 데이터가 좌표계에 의존적인지를 판단하는 것이 판단 기준이 될 수 있다

여러분에게 어떤 특징 벡터가 있고 각 요소가 어떤 특별한 의미를 지니고 있다면

예를들어 직원ㄷ르을 분류하는 문제에서 봉급 근속년수와 같은 데이터의 요소가 직원들의 특징에 영향을 줄 수 있다

이처러 ㅁ각 요소가 특별한 의미를 갖고 있다면 l1을 사용하는 것이 더 좋을 수 있다

하지마 ㄴ하이퍼파라미터 선택은 어떤 문제와 데이터인지에 의존적

여러 가지 시도를 해보고 좋은 것을 선택하는 것이 중요

하이퍼파라미터 값들을 실험해보는 작업

  • 다양한 하이퍼 파라미터 를 시도해보는 것
  • 그중최고를 선택하는 것

학습데이터의 정확도와 성능을 최대화하는 하이퍼파라미터를 선택

끔찍한 방법

가령 nn분류기의 경우 k=1일때 학습데이터를 가장 완벽하게 분류함

트레이닝 정확도를 올리려면

하지만 앞서 예제에서도 보았들시 k값을 올릴 떄 학습 데이터에 없던 데이터에 대해서 더 좋은 성능을 보일 수 있음

궁극적으로 기계학습에서는 학습 데이터를 얼마나 잘 맞추는지는 중요하지 않다

우리가 학습시킨 분류기가 한번도 보지 못한 데이터를 얼마나 잘 예측하는 가가 중요

또 다른 아이디어는 전체 데이터셋중 학습데이터와 테스트 데이터로 쪼개서 사용하는 것

학습 데이터로 다양한 하이퍼파라미터 값들을 학습시키고 테스트 데이터에 적용한 다음 하이퍼파라미터 선택

조금 더 합리적 하지만 끔찍한 방법

한번도 보지 못한 데이터에서의 알고리즘 성능을 측정할 수 있어야 함

테스트 셋에서만 잘 동작하는 하이퍼파라미터를 구하게 됨

한 번도 보지못한 데이터에서는 잘 동작하지 못할 수 있음

훨씬 더 일반적인 방버은

train validation test로 나누는 것

다양한 하이퍼파라미터로 트레이닝셋을 학습 벨리데이션셋으로 검증

벨리데이션 셋에서 가장 좋은 파라미터 선택

가장 좋았던 분류기로 테스트 셋에서 성능 측정

연구 논문을 작성할 떄 테스트 셋을 거의 마지막 쯤에야 한 번 사용함

2와 3의 차이가 뭘까?아직 직관적으로 와닿지 않음

그리고 요즘은 왜 validation을 잘 안할까?

또 다른 하이퍼 파라미터 선택 전략은 크로스 벨리데이션 (교차 검증)

이 방법은 작은 데이터셋일 경우 많이 사용하고 딥러닝에서는 잘 사용하지 않ㅇㅁ → 왜?

테스트 데이터를 정해놓고

나머지는 데이터는 트레이닝 데이터를 여러 부분으로 나누고 벨리데이션 셋을 번갈아가면서 지정한다

5-fild crooss calidaiotn

ㅊ어므 4개의 fild에서 학습 5에서 평가

1,2,3,5에서 학습 4에서 vudrk

이런 방식은 거의 표준이기는 하지만 실제로는 딥러닝같은 큰 모델을 학습시킬때는 학습 자체가 계산량이 많기 떄문에 실제로는 잘 쓰지 않음 →아하…

트레이닝셋과 벨리데이션 셋의 차이

트레이니 ㅇ셋은 우리가 레이블을 기억하고 있는 이미지들

트레이니 ㅇ셋의 레이블을 볼 수 있지만 벨리데이션 셋의 레이블은 볼 수 없다

벨리데이션 셋의 레이블은 알고리즘이 얼마나 잘 동작하는지 확인할때만 사용

테스트 셋이 한 번도 보지 못한 데이터를 대표할 수 있는지

기본적이 통계학적 가정이 하나있음

여러분의 데이터는 독립적이며 유잉ㄹ한 하나의 분포에서 나온다는 가정i.i.d assumption

모든 데이터는 동일한 분포를 따른다고 생각

물론 실제로는 그렇지 않은 경우가 ㅁ낳음

테스트 셋이 한번도 보지못한 데이터를 잘표현하지 못하는 경우를 경험하게 될것

dataset creator가 curator가 생각해볼 문제

일관된 방법으로 모은 데이터셋을 무작위로 섞어서 나누느 것이 문제를 완화시키는 방법중 하나

크로스 벨리데이션ㅇ 수행하고 다음과 같은 그래프를 볼 수 이승ㅁ x축은 k-nn의 k이고y축은 분류 정확도이다

5-fold 사용

각 k마다 5번의 크로스 벨리데이션을 통해 알고리즘이 얼마나 잘 동작하는지를 알려준다

테스트셋이 알고리즘 성능 향상에 미치는 영향을 알아보려면 k fold cv가 도움을 줄 수 있음

여러 validation folds별 성능의 분산을 고려해볼 수 있다

분산을 같이 계산하게 되면 어떤 하이퍼파라미터가 가장 좋은지 뿐만 아니라(k값) 그 성능의 분산도 알 수 있다

기계학습 모델을 학습시키는 경우에 이런 그래프를 그림

ㅎㅏ이퍼파라미터에 따라 모델의 정확도와 성능을 평가할 수 있다

그리고 벨리데이션 셋의 성느이 최대인 하이퍼 파라미터를 선택하게 되러 것

여기서는 k=7일때 가장 좋은 성능을 보임

실제로는 입력이 임지인 경우 k-nn을 잘 사용하지 않음

  1. 너무 느림
  2. l1, l2 distance가 이미지간의 거리를 측정하기에 적절하지 않음

이미지들 간의 지각적 유사성을 측정하는 척도로는 적절하지 않음

오른쪽 사진들은 원본을 변형한 사진들

눈과 입으 ㄹ가리고

픽셀식 이동도 시켜보고

전체 이미지의 파란색 색조도 추가

하지만 각 이미지와 우너본 사이의 l2 dist를 측정햇을때

읻르은 모두 동일한 l2 값을 가짐 좋지 않은 현상 (그냥 그렇게 만들었대)

따라서 서로 다른 다양한 이미지들이 (레이블이 같지 않은) 가틍ㄴ distance값을 가질 수 있따는 것을 의미

l2가 이미지들간의 지각적 유사도를 측정하기에는 적합하지 않다는 의미 잘 포착하지 못함

  1. 차원의 저주

k-nn이 하는 일은 트레이닝 데이터를 이용해서 공간을 분할하는 일이다

이는 k-nn이 잘 동작하려면 전체 공간을 조밀하게 커버할 만큼의 충분한 트레이닝 샘플이 필요하다는 것을 의미

그렇지 않다면 이웃이 사실 엄청 멀 수도 있고 테스트 이미지를 제대로 분류할 수 없을 것

공간을 조밀하게 덮으려면 충분한 량의 학습 데이터가 필요하고 그 양은 차원이 증가함에 따라 기하급수적으로 증가 아주 좋지 안은 현상

고차원의 이미지라면 모든 공간을 조밀하게 메울 수 있는 만큼의 데이터를 모으는 것은 불가능하다

2차원에는 커브 모양이 있음

더 높은 차원에서는 일종의 샘플ㄷ르의 manifolds가 존재할 수있

하지만 k-nnn알고리즘은 샘플들의 manifolds글 가정하고 있지 않기 때문에 제대로 동작할 수 있는 유일한 방법은 충분히 많은 트레이닝 데이터를 확보하는 것이ㅏㄷ

이미지와 정답 레이블이 있는 트레이닝 셋이 있엇고 테스트 셋을 예측하는 데 이용

첫 과제 k-nn 실습

최적의 하이퍼파라미터를 찾을 떄까지 학습을 다시 시키는 것이 흔한 방법인디

Linear classification

아주 간단한 알고리즘이지만 neural network와 cnn의 기반이 되는 알고리즘

일부 사람들은 neural network을 레고블럭에 비유함

nn을 구축할때 다양한 컴포넌트를 사용

cnn이라는 거대한 타워를 지을 수 잇게됨

앞으로 보게 될 다양한 종류의 딥러닝 알고리즘들의 가장 기본이 되는 블럭 중 하나가 바로 linear classifier

따라서 이게 어떻게 동작하는 지 이해하는 것은 매우 중요함

cifar10

32*32 픽셀을 가진 3채널 컬러이미지

50000장

parametric model의 가장 단순한 형태

pm에는 두개의 요소가 있음

입력이미지 x

가중치 파라미터 w theta

함수는 data X와 parameter W를 가지고 10개의 숫자를 출력

이 숫자는 cifar10의 각 10개의 카테고리의 스코어

스코어가 높다는 것은 입력 x가 해당 클래스일 확률이 높다는 것을 의미

k-nn은 파라미터가 없었음

그저 전체 트레이닝 셋을 가지고 있고 모든 트레이닝 셋을 test에 사용

하지만 parametric approach에서는 트레이닝 데이터의 정보를 요약

그 요약된 정보를 파라미터 W에 모아준다

이런 방식을 사용하면 test time에서 더이사 ㅇ트레이닝 데이터가 필요하지 않음

파라미터 w만 있으면 됨

이방법은 핸드폰과 같은 작은 디자이스에서 모델을 동작시켜야 할 때 아주 효율적이다

딥러닝은 이 함수 f의 구조를 적절하게 잘 설계하는 일

어떤 식으로 가중치와 데이터를 조합할 지 여러가지 복잡한 방법을 고려

이과ㅓㅇ들이 모두 다양한 nn아키텍처를 설계하는 과정

가장 간단한 조합 방법이 x와w를 곱하는 것