jo16
좌충우돌 기록기
jo16
전체 방문자
오늘
어제
  • 분류 전체보기 (30)
    • NLP (1)
    • 일반 (0)
    • 취업 (1)
    • 42seoul (1)
    • 운영체제 (1)
    • 컨퍼런스 (1)
    • 데이터베이스시스템 (5)
    • 알고리즘 (10)
    • 회고 (0)
    • Deep Learning Specializatio.. (9)
      • Neural Networks and Deep Le.. (4)
      • Improving Deep Neural Netwo.. (3)
      • Convolutional Neural Networ.. (0)
      • Sequence Models (0)
      • Structing Machine Learning .. (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 삼성SW역량테스트
  • 개발자컨퍼런스
  • 복습
  • 강의정리
  • cs
  • 데이터베이스시스템
  • mlx
  • 삼성대학생인턴
  • KEY
  • Computer Graphics
  • 딥러닝
  • Ai
  • NAVERDEVIEW2023
  • Cub3D
  • 컴퓨터공학
  • raycasting
  • 머신러닝
  • 첫 취준
  • 42seoul
  • relational algebra
  • 네이버 deview
  • relational model
  • dbms

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jo16

좌충우돌 기록기

Practical Aspects of Deep learning (1주차) 정리
Deep Learning Specialization 강의/Improving Deep Neural Networks

Practical Aspects of Deep learning (1주차) 정리

2024. 7. 15. 15:12

*다음 내용은 Andrew ng의 Deep Learning Specialization 과정 중 일부 강좌를 정리한 강의 노트입니다.

틀린 내용이 있다면 말씀해주세요. 

 

5개의 강좌중 두번째 강좌의 시작이다. 첫번째 강좌에서는 기본적으로 딥러닝을 구축하는 방법을 배웠다면. 이번 강좌에서는 구축한 딥러닝의 성능을 어떻게 끌어올릴 지에 대해 다룰 것이다.

Train / Dev / Test sets 

딥러닝 관련 경험이 풍부한 사람들 조차도, 한번의 시도만에 하이퍼 파라미터 (learning weight, layer의 개수, hidden unit의 개수, 활성화 함수 선택 등등..)를 정확하게 설정하는 것은 불가능에 가깝다. 따라서 실제로 머신러닝은 iterative process(반복적인 과정)이다.

 

따라서, 이 주기를 얼마나 효율적으로 돌릴 수 있는가 그리고 효율적으로 돌리는데에 있어서 Train set, hold out cross validation(development) set , test set을 어떻게 set up하는지가 매우 중요하다.

 

work flow는 대략 다음 과정을 거쳐 이루어진다. 

 

1. train set을 활용해서 적절한 알고리즘으로 모델을 훈련시킨다. 

2. dev set에서 다양한 모델 중 가장 performance가 좋은 모델을 선택

3. test set에서는, dev set을 통해 선택된 최종 모델을 평가한다.

 

그렇다면 train / dev / test set을 나누는 비율은 어떻게 될까?

 

몇 년 전까지만 해도, 보통 train, dev, test를 60 20 20 비율로 나누곤 했다.

최근 들어서는 데이터의 수가 많아지다보니 train 비율을 늘리고, dev, test 비율을 줄이는 경향이 있다.

왜냐하면, train set은 늘수록 (대체로) 성능이 좋아지지만, dev / test set은 검증을 할 정도의 양만 갖추고 있으면 되기 때문이다.

 

e.g.1,000,000개의 예제가 있다면, dev와 test는 10000개 정도로. (검증만 할 수 있으면 되기 때문) 즉 비율은 98 1 1 정도이다.

 

→ 만약 적은 데이터 셋인 경우, 전통적인 방법 (60 20 20)도 괜찮을 수 있다. 그러나 빅데이터 세트가 있는 경우 dev, test set을 훨씬 적은 비율로 줘도 괜찮을 것이다.

위 예시의 경우 traning set은 깔끔하고 고화질의 이미지겠지만, dev/test set의 경우 저해상도의 사진일 수 있다.

train set은 다양한 종류가 있을 수 있지만, dev와 test set만큼은 같은 distribution에서 오는 것으로 설정하는 것이 좋다. (효과적으로 검증하기 위해)

 

test set의 목적 : unbiased한 평가를 위한 것.

 

사람들이 dev set과 test set의 용어를 혼용하기도 하는데, 이 둘은 엄연히 다른 의미이다. 

 

Bias / Variance

 

위 이미지에 나오는 4개의 classification model은 다음과 같은 특징을 가지고 있다.

  1. over fitting (train set에 대해서만 잘 맞는 경우, 일반화가 잘 안된 경우) : high variance (train set과 dev set의 오류발생율 차이가 큼)
  2. under fitting : high bias (train set에 대해서도 낮은 성능이 나올 경우)
  3. high bias & high variance (오류발생율 차이도 크고, 오류 발생할 확률 자체도 큼. 즉 알고리즘 적용도 잘 안되었고, 일반화도 안된경우. 최악의 유형)
  4. low bias & low variance

위 이미지에 대한 설명은 Optimal Bayes error가 0프로라고 가정한 것이다. 만약 15프로라면 2번의 경우가 가장 최적일 것이다

3번(최악 + 최악)은 어떤 경우일까? 보통 linear classifier인 경우가 그렇다. 

 

Basic Recipe for Machine Learning

high bias일 때 해야할 일과, high variance일 때 해야할 일은 다르다.

 

1. high bias인 경우 : 현재 있는 training set에 대해서도 좋은 성능이 나오지 않는 경우이다. 따라서 더 큰 네트워크로 하거나, 다른 알고리즘을 적용해보며 개선을 해본다.

 

1번 문제가 해결이 되면, valid set에 대해서도 잘 작동하는지를 테스트해본다. 

2. high variance가 나온 경우 : 더 많은 data를 구해보거나, 그게 어려울 경우 Regulation을 시도해볼 수 있다.

 

high variance도 낮은 경우 성공!

 

초기에는 Bias variance는 trade off 관계라는 얘기가 많았다.

하지만 현재 딥러닝은 빅 데이터 시대라, 더 큰 네트워크를 계속해서 훈련할 수 있고, 더 많은 데이터를 얻을 수 있다고 가정했을 때, 적절하게 정규화를 하면 두 개 모두 낮출 수 있다.

 

Regularization

보통 over fitting은 현재 가지고 있는 데이터에만 너무 fit하게 학습이 된 경우, 즉 weight가 커서 함수가 과하게 구불구불한 형태가 된 경우를 말한다. 이를 해결하기 위해 적절히 weight를 줄여서(lock을 걸어서) 함수를 평평하게 만들고자 하고, 이러한 과정을 Regularization이라고 한다. 

 

비용함수를 수정해서 단순히 cost가 작아지는 방향으로만 계산하지 않고, weight의 크기도 작아지는 방향으로 학습하고자 한다. 

 

logistic regression에서의 정규화를 생각해보자.

 

원래 우리가 알던 기존 비용함수는 아래와 같다. 

 

정규화는 이렇나 비용함수에서 W(가중치)의 크기를 더한다. 

W의 크기를 어떻게 정의하느냐에 따라 L1 정규화, L2 정규화로 나뉜다. 

 

L1(Lasso) 정규화는 벡터의 크기를 절댓값의 합(맨헤튼 거리)으로 보는 경우이다.

반면 L2 정규화는 벡터의 크기를 유클리드 거리, 즉 절댓값의 합으로 보는 경우이다. 

보통 가장 많이 쓰는 형태는 L2 regularization이다.

 

L1은 모델을 압축하는 데에는 좋지만, 성능을 개선시키기에는 L2보다 효과적이지 않다고 한다.

왜인지 궁금해서 더 찾아보았다. 

loss를 줄이면서도 절댓값을 최소화하려는 L1 정규화 특성상 (왼쪽 마름모꼴 모양이다) 값이 각 꼭짓점, 즉 0으로 가는 경향이 있다고 한다. (이부분에 대해 명확히 설명해주는 것을 보지 못해 아직 100% 이해는 안된 상태이다..)

따라서 학습을 하다보면 자연스럽게 많은 x가 0이 되는 현상이 발생한다.

 

이를 다른 관점에서 보면 feature selection이 가능한 것이다. 모든 feature를 고려할 필요가 없을 때, L1 정규화를 쓸 수 있다. 하지만 딥러닝에서는 일반적으로 L2 정규화를 많이 사용한다고 한다. 

 

위 식에서 lambda는 regularization parameter로, 일종의 하이퍼 파라미터이다. labda가 클 수록 w가 강하게 줄어들고, labda가 0에 가까울 수록 정규화의 정도가 약해진다. 

뉴럴 네트워크에서 정규화는 어떤 식으로 구현될까?

dw 구할 때 L2의 경우에는 labda/m * w로, L1의 경우에는 선형적인 숫자가 추가적으로 더해질 것이다. 

w 업데이트는 gradient descent에 의해 dw를 빼는 형식으로 이루어지기 때문에 정규화를 weight decay라고도 한다. 왜냐하면 w[l]가 더 작아지는 방향으로 업데이트가 되기 때문이다.

 

Why regularization reduces overfitting

만약 람다를 엄청 큰 값으로 설정한다고 생각해보자. 그러면 우리는 w를 거의 0으로 만들 수 있다. (비용함수 J가 작아지는 방향으로 가기 때문이다) 그렇게 되면 hidden unit의 상당수가 0이 되어 거의 영향을 끼치지 못할 것이므로 얕은 신경망이나 로지스틱 회귀와 유사해진다. 따라서 weight를 줄이면 오른쪽에서 왼쪽 함수로 나아감을 알 수 있다.

정규화가 overfitting을 막을 수 있는 또다른 직관을 살펴보겠다. 활성화함수인 tanh 을 예시로 들 때, 만약 람다값이 커진다면, 그만큼 w값이 줄 것이고, 그러면 실제로 z또한 매우 적은 범위의 값을 가지게 된다. 그렇게 되면 활성화함수에 넣을 때 선형적으로 이루어질 것이다. (위 그림을 보면 매우 작은 범위에 대해서는 선형적인 모습을 보인다.)

 

Dropout Regularization

 

Dropout은 또다른 강력한 regularization 기술이다. 직관적으로 설명해보자면, 각 층 별로 랜덤하게 노드를 제거하여 신경망을 단순화하는 것이다. (제거하면 노드 뿐만 아니라 노드의 입출력도 같이 제거) 다소 황당한 방법이지만 성능이 우수하다고 한다.

 

보통 많이 쓰이는 drop out은 Inverted dropout이다.

구현식은 위와 같다. 

1. d3을 a3과 같은 차원으로 초기화한다. keep.prob를 0.8로 두면 0.2는 랜덤하게 0이 된다.

2. d3을 a3에 곱해줌으로써 랜덤으로 0이 된 a가 생긴다.

3. a3을 0.8로 설정했던 keep.prob으로 나눈다.

 

나누는 이유는 a3의 기대값을 변하지 않게 하기 위해서라고 하는데, 잘 이해가 되지 않았다. 관련 설명을 찾아보았다.

 

keep.prob를 마지막에 나누는 이유를 직관적으로 이해해보자면, 데이터 양을 일관되게 유지하기 위해서이다. 만약 prob가 0.8이어서 50개의 유닛에서 10개의 유닛이 없어진다면 다음에는 40개의 유닛에서 8개의 유닛이 없어지는 형식으로 점점 사라질 것이다. 이렇게 데이터의 양이 점차적으로 줄어 데이터가 0이 된다고 가정해보자. 그러면 학습에 의미가 더이상 없어질 것이다. 그러지않기 위해 다시 1/0.8을 곱하여 50개의 값을 유지하고자 한다.

 

중요한 점은 이거는 train할 때만이다. 테스트할 때는 모든 노드를 불러와야하기때문에 keep.prob을 1로 설정할 것이다.

 

Understanding Dropout

왜 drop out과 같은 다소 황당한 방법이 효과가 있을까?

drop out을 사용하면 더 작은 신경망을 사용하게 되므로 정규화 효과를 마찬가지로 가지게 된다. 

보라색 특성을 결정하는데 저러한 노드가 쓰인다고 가정해보자.

입력이 랜덤으로 지워진다면 한 입력에 특성이 치우쳐지지 않을 것이다. (중간에 입력 하나가 없어져도 적절한 특성을 제시할 수 있도록) 다른 말로 하면, 어떤 입력이 지워질지 모르기 때문에 한 입력에 의존할수가 없다. 

drop out은 따라서 이러한 4개의 입력에 비중을 나눠갖는 가정이다. 이것은 weigh가 shrinking되는 효과를 가지기 때문에 L2 정규화와 거의 비슷한 효과를 가진다.

 

정규화에서 람다를 조정하는 것처럼, keep prob를 조절함으로써 레이어를 얼마나 제거할 지 결정할 수 있다.

물론 입력층에서도 drop out을 적용할 수 있지만, 보통은 1.0으로 한다.

 

과적합 가능성이 있는 일부 레이어에 대해 더 낮은 keep prob을 사용하여 조정할 수 있다. 

(위 예시의 경우, w[2]이 7 * 7로 가장 큰 크기의 행렬이라, 더 적은 keep prob을 적용하였다.)

 

보통 컴퓨터 비전 분야에서 자주 사용한다. 왜냐하면 입력값이 너무 많기 때문이다.

drop out은 정규화 기법이고 오버피팅을 막기 위한 방법이라는 것을 기억하자. 따라서 오버피팅하지 않은 경우에는 굳이 쓰지 않아도 된다. 하지만 비전 분야에서는 데이터가 그렇게 많지 않기 때문에 대부분 over fitting이 일어나고, 그래서 기본적으로 drop out을 사용한다.

 

drop out의 단점 : 무작위로 노드를 취소하게 됨으로써 비용함수를 정의하기가 어렵게 될 수 있다. 따라서 drop out을 적용하지 않고 돌려서 비용함수를 확인하고, 다시 켜는 식으로 진행할 수 있다.

 

Other Regularization Methods

 

딥러닝은 기본적으로 많은 데이터가 존재해야 학습이 잘된다. 또한 overfitting을 해결하기 위해 충분히 많은, 양질의 데이터를 필요로 한다. 그러나 데이터의 수를 늘리는 것은 비용과 시간이 많이 필요하며, 어떤 경우에는 데이터 수집하거나 가공하는 것 조차 어려운 경우도 많다. 이럴 때 적용할 수 있는 것이 (1) Data augmentation이다.

예를 들어 고양이 사진이 있으면 이를 좌우전환하거나 크롭하는 방식으로 새로운 데이터를 만들 수 있다. 물론 이러한 방식은 새로운 고양이 사진보다는 효과가 좋지 못하다. 하지만 데이터가 부족한 경우 쉽게 새로운 데이터를 만들 수 있다.

숫자에 있어서도 마찬가지이다. 똑같은 4를 유지하면서 찌그러트리는 방식으로 데이터를 추가할 수 있다.

 

(2) Early stopping

 

비용함수를 계산해보자. 그리고 iteration 개수에 따른 dev set에 대한 에러율을 계산해보자. 그러면 train set은 계속 감소하는 반면 devset은 어느정도 감소하다가 다시 올라가는 경향이 있다. 그지점을 찾아서 훈련을 멈추는 테크닉이다.

왜 이런일이 발생하는 것일까? train set에 대해 과도하게 훈련시키며 over fitting이 발생하기 때문이다.

임의의 초기화에서 w를 작은 값으로 하기 때문에, 훈련을 할 수록 w 값은 점점 커질 것이다. 따라서 w 비율이 중간정도일때 중지시키는 것이다. 이렇게하면 overfitting을 방지할 수 있다. 하지만 여기는 한가지 단점이 있다.

 

우리는 비용함수를 줄이는 데에 있어 최적화시키는 여러가지 알고리즘이 있고 (그레디언트 디센트, 모멘텀, Atom ..) 그리고 overfitting을 줄이기 위한 여러가지 방법이 있다. (Regularization ..) 그리고 이 두 가지 방법은 별도로 진행된다.

 

그런데, 일찍 멈춰버리는 것은 이 두 가지의 task를 하나로 혼합시켜버리는 역할을 한다. 즉 overfitting을 방지하기 위해 비용함수를 제대로 최적화하지 않은 상황에서 멈춰버리는 것이다. 이렇게 하면 하이퍼 파라미터 조정이 복잡해지고, 불분명해진다는 단점이 있다. 왜냐하면 원하는 결과가 안나왔을 때, 이것이 어떤 이유에서 온 건지를 판단하기가 모호해지기 때문이다.

 

이를 막는 개념이 Orthogonalization(직교화) 개념인데, 이것은 각각의 작업을 별도로 수행하도록 하는 머신러닝 전략이다. 우리는 이 개념에 대해 이후에 더 다룰 것이다. 

 

따라서 ng은 L2 정규화를 권장한다. 해당 정규화의 경우에는 충분히 긴 학습으로 비용함수를 최적화시키면 되기때문에, 하이퍼 파라미터를 사용하기가 더 쉬워진다. 하지만 단점이 있다면 최적의 람다값을 찾기 위해 여러 번 시도를 해봐야한다는 것이다.(expensive) 이에 반해 early stopping은 기울기 강화를 한번만 실행해도 적절한 시점을 잡아낼 수 있다.

 

Normalizing Inputs 

신경망 속도를 높이기 위한 기술 중 하나는 입력을 normalization(정규화)하는 것이다.

 

입력의 정규화는 두 가지 단계가 있다. :

1. 평균을 normalize하기 : 즉 훈련세트들에서 평균을 빼서 평균을 0으로 만들고, 데이터들을 x축쪽으로 이동시킨다.

2. 분산을  normalize하기 : 분산은 편차의 제곱의 평균이다. (여기서는 평균이 0이므로 단순제곱) 그러한 다음 표준편차를 나누어주면 된다. 

평균의 normalize
분산의 normalize

dev set, test set도 똑같이 조정해줘야 한다.

 

왜 noramlize를 하는 걸까? 

(실제로 w는 다차원이므로 이러한 2d 이미지 형태가 정확하지 않을 수 있다. 그러나 직관적으로)

 

왼쪽과 같은 형태는 최소점을 찾는 데에 있어 시작점이 어디인지에 따라 많이 달라진다. 하지만 오른쪽같이 정규화되어 구형의 형태가 되면 어디에서 시작해도 일정하게 비용함수의 최저값으로 이동할 수 있다. 즉 학습이 더 안정적으로 이루어진다. 

 

Vanishing / Exploding Gradients

deep 신경망을 훈련시키는 데에 있어 큰 문제점 중 하나는 vanishing and exploding gradient (데이터 소실과 폭발하는 기울기)이다. 훈련시키다보면 기울기가 매우 크거나 미우 작게 될 수 있다. 이렇게 되면 훈련이 매우 까다로워진다.

 

심층 네트워크에서, 위와 같은 네트워크 형태가 있다고 가정해보자.

 

b는 0이라고 가정하고, 활성화함수는 선형함수이다.

 

그러면 결국 y는 w 행렬의 곱 * 입력 형태로 이루어진다.

따라서, w가 1보다 크면 layer을 거칠수록 최종적인 w는 기하급수적으로 커질 것이며, w가 1보다 작으면 최종적인 w는 기하급수적으로 작아질 것이다. 예를 들어 w가 2라고 해보자. 그러면 다음 신경망은 4 8 16 .. 이렇게 지수적으로 커질 수 있다. 반면 너무 w이 작으면 기울기 하강이 천천히 이루어질 것이다. (거의 갱신이 일어나지 않기 때문이다.)

 

완전한 해결법은 아니지만, w을 신중하게 초기화함으로써 위와 같은 현상을 부분적으로 방지할 수 있다.

 

Weight Initialization for Deep Networks

 

이전 강의에서 graident 문제를 일부 해결할 수 있는 방법으로 "가중치 초기화"를 얘기했었다. 따라서 이번 강의에서는 적절히 w를 초기화하는 방법을 다룰 것이다. 

z값이 너무 커지길 원하지 않는다면, n(총 항의 개수)이 클수록 w는 작아져야한다. z는 wi와 xi의 결합의 n개합이기 때문이다.

그러기 위해 한 가지 방법은 wi의 분산을 1/n으로 두는 것이다. 그러기 위해서는 특정 layer의 가중치를 np.sqrt(1/n)으로 초기화할 수 있다. (아마 평균이 0이라고 가정된 상태에서)

ReLU를 사용할 때에는 Var(분산)을 2/n로 두는 것이 더 잘 작동한다고 한다. (왜 2배로 하는지 이유는 잘 모르겠다)

 

wl = np.sqrt(2/n[l-1])

l-1인 이유는 ?:  랜덤 초기화해주고 np.squr(2/n[l-1])를 곱해주면 w의 분산을 2/n으로 만들 수 있다.

 

이렇게 분산과 평균값을 조절 (스케일링)하면서 gradient가 폭발하거나 사라지는   상황을 어느정도 예방할 수 있다. 

 

이러한 초기값 설정은 활성화함수를 무엇으로 설정햐느냐에 따라 달라질 수 있다.

 

⇒ 우리가 많이 쓰는 ReLU의 경우는 2/n이지만, tanh인 경우는 분산이 1/n인 경우가 더 잘 동작한다고 한다. 그 외에도 np.squr(2/n[l-1] * n[l])을 곱하는 경우도 있는 등 다양한 방법이 있다.

 

Numerical Approximation of Gradients

 

Back propagation을 수행하는 과정에서 gradient checking을 통해, 해당 과정이 올바른지에 대해 직접 확인할 수 있다. graident checking에 대해 알아보기 전에, 우선 산술적으로 기울기의 값을 구하는 방법부터 알아보자. 

 

삼각형을 통해 기울기를 추정할 때를 생각해보자. 작은 삼각형 (1 ~ 1.01)로 구하는 것보다 큰 삼각형 (0.99 ~1.01)을 통해 기울기를 구하는 것이 더 정확하다. 즉, 높이와 밑변의 길이가 크면 클수록 더 잘 기울기를 예측(theta의 미분값)할 수 있다. 

 

큰 삼각형을 구하는 것(즉, +엡실론에서 -엡실론 빼는 것)을 two-sided difference라고 하고, 작은 삼각형을 구하는 것(+엡실론에서 0 빼는 것)을 one-sided difference라고 한다. 실제 직접 기울기를 구하는 것과 큰 삼각형을 구하는 것 사이 오차는 0.001정도이다. 작은 삼각형을 구하면 3.0301로 0.03정도의 오차를 가지게 된다.

따라서 큰 삼각형을 구하는 것이 더 정확도가 높다는 사실을 알아두자. 미적분학에서 미분하는 방법에 대해 간단히 얘기하였다.

 

Gradient Checking

이전 강의에서 배운 것을 토대로, 어떻게 역전파과정을 디버깅을 하는지 알아보자.

모든 행렬을 합쳐서(concat) 큰 벡터로 만들어준다. 도함수도 마찬가지이다.

 

dW[1], W[1]와 db[1], b[1]은 동일한 차원을 가진다는 점을 알아두자.

 

한마디로 얘기하면, J벡터의 수치미분값과 도함수 벡터값을 비교해서 유의미하게 근소한지 볼 수 있다. 

비교는 위 이미지에 있는 것 처럼 각 벡터의 크기의 합분의 각 벡터의 차이의 크기를 구하는 식으로 이루어진다. 

이 식이 10^-7 (더 작아도됨) 정도이면 괜찮지만, 만약 10^-3보다 크다면 다시 수정해볼 것이다. 이러한 방식으로 BP(역전파)가 정상적으로 이루어지고 있는지 확인해볼 수 있다.

 

Gradient Checking Implementation Notes

 

grad check를 실제로 구현하는 데에 있어서 몇가지 실용적인 팁을 소개한다. 

  1. grad check는 training중에는 하지 말고, 디버깅때에만 사용할 것 (시간적 오버헤드 때문)
  2. 알고리즘이 grad check에 실패하면, 버그를 식별하기 위해 각 요소들을 살펴볼것 → 값이 크게 다른 i를 찾으면 어디서 버그가 발생되는지를 볼 수 있다. 
  3. regularization을 기억하라 : Regularization 항이 있다면 J(theta), d theta에도 추가해야 한다.
  4. drop out에서는 작동하지 않는다. (보통 drop out없이 grad check를 한다고 한다.)
  5. 이건 자주 발생하는 부분은 아니다. w, b가 0에 가까울 때 gradient descent값이 좋을 때도 있다. 이럴 때는 w, b가 커질 수록 정확도가 떨어지게 될 수도 있다. 이런 경우 grad check을 random으로 초기화하고, 어느정도 훈련한 다음 다시 grad check를 실행할 수 있다. (정확히 이해하지는 못했다.)

참고

https://light-tree.tistory.com/125

 

딥러닝 용어 정리, L1 Regularization, L2 Regularization 의 이해, 용도와 차이 설명

제가 공부하고 정리한 것을 나중에 다시 보기 위해 적는 글입니다. 제가 잘못 설명한 내용이 있다면 알려주시길 부탁드립니다. 사용된 이미지들의 출처는 본문에 링크로 나와 있거나 글의 가장

light-tree.tistory.com

https://palettepath-it.com/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-ai-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%9D%B4%EC%96%B8%ED%8B%B0%EC%8A%A4%ED%8A%B8-%ED%95%84%EC%88%98-%EC%A7%80%EC%8B%9D-l1%EA%B3%BC-l2-%EC%A0%95%EA%B7%9C/

 

L1과 L2 정규화 완벽 이해하기 : 데이터 사이언티스트 필수 지식 - 머신러닝 AI - Palette Path - IT

1. 데이터 정규화의 중요성 (Data Normalization) 데이터 과학과 머신러닝 분야에서 데이터 정규화는 중요한 과정입니다. 데이터 정규화는 다양한 스케일의 데이터를 일정한 범위나 형태로 변환하는

palettepath-it.com

https://sanghyu.tistory.com/13

 

Regularization(정규화): Ridge regression/LASSO

이 강의를 보고 정리한 내용이고 자료도 강의에서 가져온 자료임을 밝히고 시작한다. 이전 포스팅에서 살펴본 linear regression 모델을 다시 살펴보자. 이렇게 least square solution을 구하면 너무 모델

sanghyu.tistory.com

https://www.quora.com/When-would-you-chose-L1-norm-over-L2-norm

 

When would you chose L1-norm over L2-norm?

Answer (1 of 2): In a typical setting the L2-norm is better at minimizing the prediction error over the L1-norm. However, we do find the L1-norm being used despite the L2-norm outperforming it in almost every task, and this is primarily because the L1-norm

www.quora.com

 

https://foxtrotin.tistory.com/531

 

역 드롭아웃 inverted dropout 구현 시 추가 값을 곱하는 이유

dropout을 적용한 forward propagation(순전파)을 계산할 때 주의할 점이 있다. 최종 cost가 dropout을 사용하지 않았을 때와 동일한 값을 유지하도록 마지막에 keep_prob값으로 나눠주는 것이다. 아래 순전파

foxtrotin.tistory.com

 

'Deep Learning Specialization 강의 > Improving Deep Neural Networks' 카테고리의 다른 글

Hyperparameter Tuning, Batch Normalication and Programming Frameworks (3주차) 정리  (4) 2024.07.22
Optimization Algorithms (2주차) 정리  (2) 2024.07.17
    'Deep Learning Specialization 강의/Improving Deep Neural Networks' 카테고리의 다른 글
    • Hyperparameter Tuning, Batch Normalication and Programming Frameworks (3주차) 정리
    • Optimization Algorithms (2주차) 정리
    jo16
    jo16
    공부한 것들을 기록합니다.

    티스토리툴바