코딩펭귄 2022. 12. 23. 11:48

 딥러닝 

sony 인공지능 로봇

- 머신러닝보다 더 작은개념 (사람이 개입 안함)

- '신경망' 통해 인공지능만드는 머신러닝의 한 종류

- 신경망을 여러층 쌓아서 만든것(깊은신경망 = 딥 러닝)

-> 사진) sony 인공지능 로봇

 

 

 딥러닝과 머신러닝의 포함관계는

:: 인공지능  >> 머신런닝 >> 딥러닝 ::

- 인공지능은 인간의 학습능력과 추론능력, 지각능력등을 컴퓨터로 실현한기술. 그 연구분야중 하나가 머신러닝

- 딥러닝은 인공신경망을 이용한 머신러닝의 한 종류 (머신러닝의 하위개념으로 봄)

 

 머신러닝과 딥러닝의 역사 

AI History | AMiner (arnetminer.org)

 

 머신러닝& 딥러닝 차이 : "사람의 개입 여부" 

- 머신러닝 : 데이터를 인간이 먼저 처리한다 ex) 인간이먼저 개와 고양이 사진 보고 특징 추출후, 예시통해 컴퓨터 학습시키고 식별하게 만든다 : 신경망 없

- 딥러닝 : 심층신경망통해 스스로 데이터(개와 고양이) 특성을 훈련하여 분류해냄 ex) 어린아이가 학습하는것처럼 '경험'중심으로 학습을 수행 : 신경망 있음

출처) https://www.codestates.com/blog/content/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EB%94%A5%EB%9F%AC%EB%8B%9D%EA%B0%9C%EB%85%90

 

머신러닝 )  '모델을 정했다' = 어떻게 패턴을 추출할것인지 정했다 = '알고리즘' 고르기

딥러닝 )  특정 '신경망 구조' = '모델' (최적의 딥러닝모델구조 찾아주는방법 : NAS)

 

정리

=> 인공지능 : 사람의 지적능력을 컴퓨터를통해 구현하는 기술

=> 머신러닝 : 사람이 정한 모델과 특징 추출 방법을 이용하여 데이터를 기반으로 추론할 수 있게 하는 기술

=> 딥러닝 : 인공신경망 방법을 이용해 만든 머신러닝 기술로, 빅테이터 학습에 적합한 기술

 

 머신러닝과 딥러닝 학습방식 

지도학습 & 비지도학습

지도학습 : 정답지가있는 학습방법 (우리가 많이 하는 방법 : label & target )

비지도학습 : 정답지가없는 학습방법 (최근 과제임. 요즘추세는 정상적인것들만 넣고, 비정상을 밝혀내게 한다. 딘잠) 운리적인 문제, 의료적사고같은 경우 누가 책임을 져야 하는가)

 

지도학습

- 주가예측 (회귀, regression)

-> 주식을 예측하려면 기업의 재무제표, 금리, 뉴스등 다양한 이벤트에 의해 결정됨. 입력값이 무수히 많은 변수가 있지만, 보고자하는건 '주가' 하나이다. 이렇게 한가지 값을 예측하는 방식의 인공지능 = '회귀'

-> 당뇨지수 예측등 수치 맞추는것 또한 '회귀'

- 지도학습의 데이터로는 정형데이터, csv가 많이 쓰이므로 pandas 잘다룰수있어야할것

=> 데이터와 레이블(label, 정답지), 즉 퀴즈와 정답을 같이 주며 퀴즈푸는방법을 학습을 시키는 방식

 

비지도학습

- 클러스터링 clustering _비슷한것끼리 뭉치게 하는 알고리즘

- 정답없이 특징들만을 가지고 그룹을 만들어가는 과정

= 데이터만을 주고, 데이터의 특징들만 보면서 군집등의 문제를 푸는 방법

 

::  분류와 회귀 = 주관식문제와 객관식 문제 ::

머신러닝이 맞춰야하는 정답지l(abel)가 이산적 : 분류(주관식, 연속성 없음) /  정답이 연속적 : 회귀(객관식, 연속성 있음)

** 요즘은 비전(립스틱색상이 내얼굴에 잘 어울릴까, 사진찍으면 톤이 내얼굴에 맞게 보정 )보단 예측이 반응이더 좋은 추세임 **

 

 

     Linear Classification (선형분류)     

- 선형분류기 : 클래스의 점수를 3개의 모든 색상채널에 걸쳐 모든 픽셀값의 가중합으로 계산한다

 

Linear Classification 종류

1) 단순 선형 회귀 분석 Simple Linear Regression Analysis

- y = wx + b (독립변수 x, 가중치 w, 별도로 더해지는 값인 편향 b)

- 하나의 직선만을 표현할수있음 ex) 개와 고양이 비교할때 : 양성이냐 음성이냐로 단순한 하나의 판단할때는 사용가능. 하지만 3개를 분류하는 분석에서는 사용불가

 

2) 다중 선형 회귀 분석

- y = w1x1+w2x3+...wnxn + b

- ex) 다수의 요소를 가지고 집의 매매가격 예측(x=집의 층수, 방 개수, 지하철 역과의 거리 등등 다수의 요소를 가지고 집의 매매가격 예측) 

- 예측에 많이 사용되는 방법

 

** 가중치 weight : 처음 들어오는 데이터에서 다음노드로 넘어갈때 각기 다르게 곱해야 한다는것 (모두 같은값이면 계속 같은값이 나오게 될것)

** 편향 bias : 하나의 뉴런으로 입력된 모든값을 다 더한 뒤(=가중합) 이 값에 더해주는 상수

 

 

   선형분류를 이해하는 관점   

 

1) 대수적 관점 Algebraic View point

- 선형분류를 단순히 행렬과 벡터의 곱에 offset벡터를 더한것으로 본다.

 

2) 가중치 트릭 Bias Trick

- bias를 weight의 마지막 열로 추가시킴 + data vector의 마지막원소로 1 추가

- offset 추가로 더할필요없이 단순히 곱하기만하면 간단히 계산할수있다

- 많이쓰이는곳 : text, 자연어쪽(1차원 벡터를 사용하는 경우 유용)

 

3) 선형 예측

- 선형분류(Linear Classifier)의 결과가 이름대로 Linear하다는것을 한눈에알수있음

- 이런 Linearity 때문에 분류결과가 달라질수있는데, 이는 적절한 loss function을 선택함으로써  대처 가능, 마지막에 sigmoid함수 처리 해줘야된다 (ex.0.5이상이면 True, 아니면 False)

 

4) 선형 분류

- Algebraic Viewpoint : 자연어쪽에서 많이사용됨

- Visual Viewpoint 템플릿매칭 : Weight의 각 행을 input image의 크기로 변환하고 각각 image와 내 적을 하고 weight의 각 행에 대응하는 bias(바이어스)를 더해주는 관점 (classifier가 wieght을 학습하는 것을 카테고리 당 하나의 이미지 템플릿을 학습한다고 본다 )

--> 이런 관점으로 Linear Classifier 이해하면 이가 context cue에 많은 영향을 받는것을 쉽게 확인할수 있다 (ex.숲속에 차가있는이미지 : 배경인 숲의 영향을 받아 배경이 숲인 템플릿이미지가진 사슴으로 분류하기 쉬움)

 

 

선형분류는 어떻게 점수를 얻는가?

- w(가중치)를 이용해서 class score를 구한다.

- Loss Function : w(가중치)가 얼마나 좋은지 알려주는 측도, 현재의 classifier가 얼마나 좋은지 알려주는 측도

                            Loss function의 출력값 = loss (loss는 classifier와 반비례함)

- Optimization : Loss Function을 최소화하는 방법

 

 

 

  Loss function  

 

1) Multiclass SVM Loss

- 다른클래스의 class score와 해당클래스의 class score 의 차가 일정한 'Margin'보다 크면0, 아니면 차이+Margin(여백)

- 이미지쪽보단 시리얼에서 더 많이 사용됨

- margin 이 충분히 크다면, class score가 바뀌더라도 이미 loss가 0이라면 계속 0이된다

- max연산을 사용하므로 Loss의 최솟값은 0, 최댓값은 무한하다(score가 랜덤하게 나오는데, 각 score의 차의 총 합은 0에 근접할것이므로 이경우 Loss는 (C-1)*margin일것. (c=class수)

- 특정한값의 Loss 만들어내는 w 는 항상 유일한게 아니라 여러개 존재할수있다(=>여러개의 w 중 w를 선택하기위한 다른 매커니즘이 필요하다)

 

2) Regularization 정칙화

- 모델이 학습 데이터에 지나치게 치우치는 것을 방지하기 위해 사용

- Linear Classifier에서 Regularization을 사용할 때에는 Loss Function의 Data loss항 외에 추가로 Regularization 항을더해서 사용됨. 이때, regularization 정도를 정해주는 hyperparameter Lambda가 regularization 항에 곱해진다

- AlexNet | PyTorch

- resnet, relu, squeeze net, mobileNeetV3 많이 쓴다(다 어려우면 그냥 tensor flow light 쓰기

 

-> overfitting : 한 dataset에만 지나치게 최적화된 상태., 즉 학습데이터에대해 과하게 학습하여 실제데이터에대한 오차가 증가할경우 발생한다

-> 이 그래프처럼 학습데이터에서는 오차가 감소하지만, 실제데이터에선 오차가 증가하는 지점이 존재할수있다

- underfitting : 모델이 너무 간단해서 학습오류가 줄어들지 않는것

 

 

- overfitting을 완화시키는 방법 -

1) Training data 늘린다 (->학습시간이 늘어남-> 비용 늘어남 -> 효율적이지x, but 성능은 높아짐)

2) Regularization

3) Drop-out

*라벨스무딩, 로테이션* 주의

 

- Regularization 사용 목적 - 

1) 학습데이터에 과적합(overfitting) 피하기위해

2)  feature들에 대한 선호도 나타내기위해 

 

- 왜 학습데이터에 적합한 모델을 만들면 안될까?

: (이전에 학습하지않은 데이터가 들어왔을때) 모든 데이터에대해 유용하게 사용될수있는 일반화된 모델이 필요하기때문

 

 

* L1 Regularization

-> Weight 값 자체를 줄이는 것이 아니라 W의 부호에 따라 상수 값을 빼주는 방식으 로 regularization 정칙화를 수행

 

 

* L2 Regularization

 

- L1과 다른점 : w값이 절대값이아닌, '제곱값' 이다.

 

- w앞에 곱해진 값에 의해 값이 작아지는 방향으로 진행하게 된다. 이를 weight decay라고 한 다. weight decay에 의해 특정 가중치가 비이상적으로 커지고 그것이 학습의 효과에 큰 영향을 끼치는 것 을 방지할 수 있다

- outlier에 대해선 L1보다 덜 Robust(둔감)하다.(outlier 신경써야하는경우 사용)

 

 

=> 정리 : regularization을 하는것 (w가 작아지도록 학습을 하는것) = local noise가 학습에 큰 영향을 끼치지 않는다는 것을 의미하며, outlier(특이점)의 영향을 적게 받도록 하고 싶은 것

 

3) Cross-Entrophy Loss (Multinomial logistic Regression)

- 확률을 구할때 softmax function 사용

- 다중분류를 하기위해 사랑받는 모델

- 다중분류를 할거면 이거 쓰면 된다

- Min Loss : 0 (실질적으로 도달했다고 할수는 없음), Max Loss : +infinity

 

4) 옵티마이저

- Loss를 최소화하는 w를 찾는것 (등산하는 사람이 고지대에서 저지대로 가는길을 찾는것)

 

- 간단한 모델에서는 간단한 미분을 통해 최소 Loss를 가지는 W를 찾을 수 있지만, 복잡한모델에서는 최적의 w를 찾기 어렵기때문에, 일반적으로는 특정공식으로 찾기보단 최소 Loss 를 가지는 이상적인 w값에 가깝게 조금씩 w를 변경하는 방법 이용한다

1) Random Search (bad idea) 

- 주어진 범위 내에서 임의의 조합을 추출하여 최적의 조합을 탐색하는 방법

- 랜덤하게 W를 변경했을 때, Loss가 이전보다 개선되면 W를 갱신

2) Follow the slope

- Loss Function이 그리는 면을 따라 최적의 W를 찾는 방법(사람이 산비탈 타고 내려가는것처럼!)

- 1차원일경우 도함수이용, 아닌경우 gradient 이용

-- Analytic Gradient(분석기울기) : 정확하지만 그만큼 복잡해서 구현 과정에 있어 실수하기 쉽다 -> 새로운 Analytic Gradient를 개발했을때에는 실제 모델에 적용하기 전에 Numeric Gradient를 사용해 제대로 구현되었는지 확인하는 Gradient Check라는 것을 해야한다

 

Batch Gradient Descent

Loss가 각 데이터의 합으로 이루어져 있는 것처럼 Gradient도 각 데이터의 합으로 이루어져 있다.-> 데이터가 많아질수록 전체 Gradient를 계산하는 것에 많은 비용이 들기때문에

-> 일반적으로 Gradient Descent를 약간 변형시켜(ex.SGD) 사용한다

 

SGD  (stochastic Gradient Descent)

- 모든 데이터에 대해 Gradient와 Loss를 구하기보다는 표본 데이터를 추출해서 일부만을 가지고 구함

  (표본 데이터= minibatch,  일반적으로 32, 64, 128 등의 크기로 사용)

- 표본 데이터를 가지고 Gradient와 Loss를 구하기에 표본 데이터의 분포가 전체 데이터의 분포와 최대한 유사하도록 표본을 선정해야 한다

- SGD 의 문제 : Gradient Descent가 지그재그를 그리며 진행되어 그래서 더 많은 step이 소요됨 -> Full Batch보다 Overshoot(오버슈트)문제에도 더 취약함(running rate 너무크게 설정했을때 이런문제가 발생)

** 오버슈팅(overshooting) : Learning Rate를 너무 크게 설정할 경우, 최적화된 W 값을 지나쳐 학습이 이루어지지 않고 오류가 발생 ** 

overshoot = 이 원 밖의 결과값이 나오는것

 

--> 순수한 SGD 사용하기보단 변형해서 사용 : SGD + Momentum

 

- SGD + Momentum에서 Momentum은 SGD의 진행 추세이며 이는 SGD의 관성이라고도 할 수 있음.

- 그래서 SGD에서 W가 Local Minimum이나 Saddle point를 만나더라도 이 '관성'의 영향을 받아 쉽게 탈출할 수 있고, 또한 지그재그로 움직이게 되는 Poor Conditioning(열악한 조건)도 완화해줌

 

 

 

 

 

 

 

 

 

- 정상인것들만 밀어놓고 과연 불량을 잡아낼수있을까_ GUI 이용 +  flask로 웹 만들어서 이미지 업로드

- 이미지 :  각 라벨별로 1000~2000장은 있어야 학습시키는게 의미가 있을것

 

- 농수산물, 화장품, 

- 창문닦기

- 쇼핑몰 옷입히기, 추천

- 아크탄젠트 써서 운동 제대로 하고있는지 자세 보는것 : 측정

- 주식예측

- 스노우 : 키포인트잡아서 눈썹 가지고와서 붙여넣기

- 피부질환별 연고 추천해주기

- 적절한 수면시간 추천

- 상의 선택하면 하의 추천해주

- 컬러매칭_ 감정분류한다음 어울릴 색상 추천 _ 선형회귀분석 - 다중회귀분석 이용

- 앱개발까지 할수있음 해보기

- 알약구분 : detection-알약잡기 / classification : 색상 모양 분류, OCR(알약 음각양각 심해서 인식률 낮음), 알약종류 : 14만개라 힘들것

- 클릭수 ??? 분

- 로컬에서만 돌려보지 말고, 아마존 웹서버같은곳에도 올려보기