네이버 AI 부트코스 준비 - 3

박경현·2022년 12월 14일
0

베이즈 통계학에 대한 내용을 작성해보려고 한다

이 부분에는 용어에 대한 정의가 많이 나와서 그 카테고리 위주로 정의를 이해해야겠다

조건부확률

조건부 확률 -
p(A|B) => p(A와 B의 교집합) / p(B) 임

만약 내가 하나의 교집합을 원한다면 -> p(A) * p(B|A)

베이즈 정리는 조건부 확률을 이용하여 정보를 갱신하는 방법을 알려줌

  • 사후확률: 데이터 관찰했을때 나오는 확률 (결과)

  • 사전확률: 가설, 즉 데이터 없을때 생각해보는거

  • 가능도: 현재 주어진 가정에서 이 데이터가 관찰될 확률

  • Evidence: 데이터 전체 분포

문제:

  • 발병률 10 프로, 실제 걸렸을때 검진될 확률 99프로, 안걸렸을때 오검진 확률 1프로 라고 해보자
    질병에 걸렸다고 검진결과 나왔을때 진짜 감염되었을 확률은?

과정:
사전확률은 10프로 즉 0.1
걸린사람 가능도: 0.99
안걸린사람 오검진 가능도: 0.01

Evidence는 (0.990.1) + (0.010.9) = 0.108 이 나옴

정답

  • 0.1 * (0.99)/(0.108) = 0.916

예외처리
만약 오탐율 즉 오검진 가능성이 오르면 테스트의 정밀도가 확 떨어진다!

베이즈 정리를 통해 새로운 데이터가 들어왔을때도 확률 정보 갱신이 가능하다!

앞에서 covid판정 받은 사람이 두번째 검진때도 양성 나왔을때 covid걸릴 확률?

이때는 전에 있던 내용이 사전확률이 된다!
이때 오탐율이 늘어서 전에 결과가 0.524라고 한다면 -> 사전확률은 0.524이다
0.990.524 + 0.10.476 = 0.566
0.524 * (0.99)/0.566

조건부확률로 인과관계 추론하지 말자!

이유: 인과관계를 위해서는 데이터 분포의 변화에 대한 강건한 예측모형 만들 필요 있다
-> 이건 높은 정확도를 담보하지않는다!

인과관계추론 예제
신장결석크기 : Z
치료법: a,b
완치: R
치료법 a,b에 대한 완치율
신장결석크기가 중첩요인이다!

전반은 b가 높지만 신장크기 종류 별로 보면 a가 높다

중첩요인의 효과를 제거하고 원인에 해당하는 변수 만의 인과관계를 계산해야함

최적화의 주요용어

언어는 잘못된 이해의 원천이다 - 최적화에는 다양한 용어가 나옴 - 제대로 개념 안잡으면 오인됨

Generalization

일반화 성능을 높이는게 목적-> 일반적으로 학습 많이 자주 시키면 학습데이터에 대한 에러가 줄어든다!
이게 줄어들어서 에러가 0 이 되도 100프로 만족할 만한 최적화는 절대 아니다!

어느정도 시간 지나면 학습에 사용하지않은 데이터에 대한 test error가 나올 수 있다!

Generalization gap이 생김! 학습데이터와 훈련데이터의 차이

Under-fiting VS Over-fiting

under-fiting 은 우리가 데이터를 학습시킨 부분이 너무 간단하게 표현되는것! -> ex) 선하나

over-fiting 은 너무 복잡하게 표현되어버리는것! -> ex) 아리랑 고개

Cross Validation

훈련데이터와 validation data를 나누는게 일반적
어떻게 나눠서 더 최적화 시킬 수 있나

어떻게 나눌것인가 -> 예를 들어 10만개 데이터 있으면 5(K)개로 파트 나눠서
첫번째 파트를 validation 데이터로 하면 나머지 전부를 훈련데이터
두번째 파트를 validation 데이터로 하면 그 외 나머지 전부를 훈련데이터

Bias and Variance

총 쏠때 과녁에 한 곳에 몰리게 적중 시켜야 좋은 학습이다 - low variance
평균적으로 봤을때 true target에 접근시켜서 한점에서 찍히게 하는게 중요!

Bootstrapping

부츠의 신발끈 -> 학습데이터 100개 있으면 몇개만 활용해서 활용한 모델을 여러개 만듬
-> 그 후 하나의 입력에 대한 각각의 모델이 예측하는게 일치하는지 확인하기!

Bagging

학습데이터 고정되어있을때 학습데이터 여러개 만들어서 모델 여러개 만듬 - 위랑 비슷

Boosting

학습데이터 100개 있으면 간단한 모델을 만듬 - 80개 데이터 예측 잘해도 20개 잘못한다면

두번째 모델을 만듬 - 이건 20 개의 데이터만을 위한 모델임 => 이렇게 해서 전부 합침

경사하강법 방법

Stochastic Gradient Descent(SGD, 확률적 경사하강법)

Neural Network의 Weight를 조정하는 과정에는 보통 Gradient Descent라는 방법을 사용
이 네트워크의 파라미터들을 @라고 했을때 네트워크에서 내놓는 결과값과 실제 갑의 차이를 정의하는
loss function의 값을 최소화하기 위해 기울기를 이용

Gradient Descent에서는 Loss Function의 값을 최소화하는 @값을 찾는것으로
기울기의 반대방향으로 일정 크기 만큼이동하는 것을 반복!

일부의 데이터만을 모은 (Mini-batch)를 사용하여 Lostt Function을 계산한다!

Batch Gradient Descent보다 부정확할수 있지만 계산속도가 빨라서 더 많은 step을 갈 수 있으며
여러번 반복할 경우 Batch처리한 결과로 수렴된다

Batch Gradient Descent(BGD)

이 때 Loss function을 계산하기위해 전체 Train-set을 사용하는것이 Batch Gradient Descent임

그러나 한번 step 내딛을 때 전체 데이터에 대한 Loss function을 계산해야해서 실제 사용에 애매

Momentum

모멘텀을 사용하면 학습 방향이 바뀌지 않고 일정한 방향을 유지하면서 움직인다.
같은 방향의 학습이 진행된다면 가속을 가져 더 빠른 학습을 기대할 수 있다

한번 gradient가 이동하면 그 다음에도 그쪽으로 이동하게 만드는 것!
a(t+1) = B(이게 모멘텀)*at +gt

알고리즘에 운동량을 추가해서 언던에서 빠르게 아래 내려가게 만들었다고 생각하면 편함

Nesterov accelerated gradient(NAG)

gradient를 계산할때 Lookahaed gradient(한번 이동 즉 a라는 정보가 있으면 여기로 gradient를 함)를 사용

Adagrad(adaptive gradient)

지금까지 많이 변화한 매개변수는 적게 변화하도록 하고,
반대로 적게 변화한 매개변수는 많이 변화하도록하여 learning rate값을 조절하는 개념의 알고리즘!

기존 SGD에 저 내용을 추가한것이다

Adadeleta

adagrad가 최대한 커지는 현상을 막겠다
어느정도 사이즈만까지만 변화시키겠다

합을 구할때 지수평균을 사용

RMSprop

Adagrad의 단점을 보완하기 위해 나옴 -> gradient 의 제곱값을 더해나가면서 구하는게 아니라
지수평균으로 바구어서 대체한 방법
이렇게 대채하면 무한정 커지지 않으면서 최근 변화량의 변수간 상대적인 크기 차이는 유지할 수 있다

Regularzation

generalizaiton이 잘 되게 규정을 검
학습에 반대되게 즉 학습을 방해함으로써 학습데이터 뿐 아니라 테스트 데이터까지 잘 작동하게 만드는게 목적

Early stopping
학습을 중간에서 일찍 멈춤 -> loss가 커지기 시작하면 멈추자

Parameter norm penalty
뉴런네트워크 파라미터가 너무 커지지 않게 하는거,
네트워크를 다 제곱하고 더한거를 줄인거!!

Data augmentation
데이터가 무한히 많으면 왠만함녀 다 잘됨
데이터가 적으면 굳이 딥러닝 안써도 잘 되는 경우가 있음

주어진 데이터를 어떻게든 내가 늘리는거! - 이미지면 각도를 돌린다든지 등

Noise Robustness
입력데이터에 노이즈를 넣는다!
뉴런네트워크의 input과 가중치에도 넣음(weight) ->

Label Smoothing
학습데이터 2개를 뽑아서 섞는거
분류 문제를 푼다고 했을때 이 분류를 잘하냐가 목적 -> 이 바운드리를 부드럽게 만들어준다

Dropout
뉴런네트워크의 가중치를 0으로 바꿈
뉴런의 50퍼센트등을 0으로 바꿈 -> 성능 올라가게

Batch Normalization
논란많음

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글