koos808

딥러닝 제대로 시작하기(책) - 5장 요약 및 Quiz 본문

Deep Learning/딥러닝 제대로 시작하기

딥러닝 제대로 시작하기(책) - 5장 요약 및 Quiz

koos808 2020. 7. 5. 02:15
728x90
반응형

※ STEP 5 : 자기부호화기(autoencoder)

  • Q. 오토인코더의 목적이 뭐에요?

    • 오토인코더는 목표 출력없이 입력만으로 구성된 트레이닝 데이터로 비지도 학습을 수행하여 데이터의 특징을 나타내는, 더 나은 표현을 얻는 것이 목표인 신경망입니다.
    • 또한, 딥 네트워크의 사전훈련(pre-training), 즉 그 가중치의 좋은 초기값을 얻는 목적으로 이용됩니다.
    • 자세히 설명하면, feature의 학습을 통해 샘플 x의 또 '다른' 표현인 y를 얻는 것이고, 직관적으로 x를 그대로 쓰는 대신 변환된 y를 사용하는 것입니다.
  • Q. 오토인코더의 학습 목표가 뭐죠?

    • 오토인코더의 학습의 목표는 입력을 부호화(encode) 한 뒤, 이어 다시 복호화(decode) 했을 때 원래의 입력을 되도록 충실히 재현할 수 있는 부호화 방법을 찾는 것이에요.
    • 또한, 오토인코더는 오차함수를 최소화하는 과정을 통해 신경망의 가중치와 바이어스를 결정하게 됩니다.
  • Q. 오토인코더의 활성화 함수오차함수는 보통 무엇을 사용하죠?

    • 오토인코더의 활성화 함수중에서 중간층의 f는 자유롭게 바꿀수 있으며 통상적으로 비선형함수를 사용합니다. 그리고 출력층의 f'은 신경망의 목표 출력이 입력한 x 자신이 될 수 있도록 입력 데이터의 유형에 따라 선택합니다.
    • 1.x의 성분이 실수값을 가질때, 출력층의 f'은 항등사상으로 하는 것이 좋고 오차함수로는 입력값과 출력값에 차에 대한 제곱합을 사용합니다.
    • 2.x의 성분이 이진값을 갖는 경우에는 f'으로 로지스틱 함수를 보통 사용하고 오차함수로는 교차 엔트로피를 사용합니다.
  • Q. 오토인코더를 결정하는 요소에는 뭐가 있을까요?

    • 주로 중간층의 유닛 수와 해당층에서 사용되는 활성화 함수가 있죠.
  • Q. 오토인코더의 최적화에 대해서 주의할 점을 간단히 설명해주세요.

    • 오토인코더의 최적화는 확률적 경사 하강법의 샘플 추출 시를 제외하면, 랜덤성 없이 결정론적으로 진행된다는 점에 주의하면 됩니다.
  • Q. 과완비(overcomplete) 란 무엇이죠?

    • 오토인코더는 입력 데이터의 feature(자질) 를 학습함으로써, 입력 데이터에서 불필요한 정보를 제거하고 그 본질만을 추출하는 겁니다.
    • 이러한 이유 때문에 입력 데이터의 성분 수 Dx보다도 인코딩된 부호가 갖는 성분 수 Dy는 자연히 더 작을 거라고 생각하는데 항상 그렇지만은 않아요.
    • 즉, 희소 규제화를 이용한다면 여분의 자유도를 갖는 특징이어도 입력 데이터를 잘 나타내는 자질을 얻는 것이 가능해지는데, 이것을 과완비(overcomplete) 한 표현이라고 합니다.
  • Q. 그럼 희소 오토인코더(sparse autoencoder) 는요?

    • 예를 들어서 중간층에 활성화 함수로 선형함수를 사용한 경우, 중간층의 유닛수 Dy가 입력층의 유닛 수 Dx보다 많다면 무의미한 결과밖에 얻을 수 없습니다. 활성화 함수에 비선형함수를 사용하면 이러한 논의는 처음부터 성립할 수 없지만, 중간층의 자유도가 입력의 자유도보다 크다는 것은 변하지 않으며, 쓸모없는 해만을 얻게 될 가능성이 높습니다. 이에 대해 희소 규제화를 사용하면, 증간층의 유닛 수가 더 많은 경우(Dy >= Dx)에도 오토인코더가 의미 있는 표현을 학습할 수 있게 되는데 이를 희소 오토인코더라고 부릅니다.
  • Q. 희소규제화에 대해서 좀 더 자세히 설명해주세요.

    • 기본적인 아이디어는 훈련 샘플 Xn을 되도록 적은 수의 중간층 유닛을 사용하여 재현할 수 있도록 파라미터를 결정하는 것입니다.
    • 또한, 입력 x로부터 중간층의 출력 y를 거쳐 출력 x'가 계산되는 과정에 있어서, y의 각 유닛 중 되도록 적은 수의 유닛만이 0이 아닌 출력치를 갖고 나머지는 출력이 0이 되도록(=발화하지 않음)하는 제약을 가합니다.
      • 원래의 오차함수 E(w)에 희소 규제화 항을 추가한 E'(w)를 최소화한다.
    • 간단히는 활성도의 평균값이 작아지도록 제약을 가하고 각 샘픔을 표현하는 데 쓰이는 중간층 유닛의 수가 적어지도록 학습을 진행한다고 설명할 수 있습니다.
  • Q. 희소규제화에서 로(ρ)베타(β) 는 무엇을 의미할까요?

    • 우선 로(ρ) 햇은 중간층의 유닛의 평균 활성도의 추정치를 나타내고 로(ρ)는 그 목표치가 되는 파라미터이다.
    • 원래의 오차함수 E(w)에 최소 규제화 항을 추가한 E'(W)를 최소화하면 중간층의 각 유닛 평균 활성도가 작은 ρ에 가깝게 되고, 입력의 재현오차 E(w)가 작아지도록 w가 정해진다.
    • 베타(β)는 이 두가지 목표의 밸런스를 결정하는 파라미터다.
  • Q. 그렇다면 희소규제화 항에서의 베타(β) 에 따라 어떤 특징이 나타날까요?

    • MNIST를 예로 들면 β가 0, 즉 희소 규제화를 하지 않은 경우에 학습된 특징은 어수선한 패턴을 보입니다.
    • 이에 반해 β = 3.0 정도의 강한 규제화를 한다면 각각의 숫자가 그대로 특징으로 선택되고 맙니다.
    • 즉, 학습 시의 희소 규제화는 오토인코더의 중간층의 각 유닛을 '분담'하여 표현하는 양상을 제어하는 역할을 한다고 할 수 있습니다.
    • 희소 규제화를 하지 않을 때는 중간층의 유닛은 각각 제멋대로 입력을 표현하려고 하지만, 알맞은 정도로 희소 규제화가 행해지면, 입력이 갖는 구조를 효율적으로 표현할 수 있도록
      중간층의 유닛이 협력하여 각각의 입력을 표현하게 됩니다. 또, 희소 규제화가 너무 강하면 중간층 유닛이 집합으로서가 아닌, 되도록 단독으로 각각의 입력을 표현하려고 하는 경향이 있습니다.
  • Q. 희소규제화가중치 감쇠의 차이점은?

    • 가중치 감쇠의 규제화 항은 가중치 파라미터 그 자체에 대한 함수이므로 가중치의 업데이트 식만 수정하면 된다.
    • 하지만, 희소 규제화 항의 경우는 해당 층 유닛의 활성도에 대한 제약이기 때문에, 단지 그 충뿐 아니라 해당 층 아래에 있는 모든 층의 파라미터에 의해 정해지게 된다.
    • 따라서 일반적으로는 델타의 역전파 자체를 수정해야 한다는 차이점이 있다.
  • Q. 배치 최적화와 미니배치에서 평균 활성도를 어떻게 구할까요?

    • 배치 최적화에서는 모든 샘플의 feed-forward 계산을 한 번 해서 각 유닛의 출력을 구한 뒤 활성도의 평균을 계산해야 합니다.
    • 하지만 미니배치를 사용하여 학습 중이라면, 평균 활성도만을 계산하기 위해 모든 샘플을 계산하는 것이 비효율적이므로 미니배치 내의 모든 샘플에 대해서만 평균 활성도를 구하는 것을 반복합니다.
  • Q. 데이터의 백색화(whitneing) 가 무엇입니까?

    • Trainning 데이터의 불필요한 경향은 학습을 방해하는 원인이 되는데, 학습 전 이를 처리하는 것이 백색화(whitening) 라고 합니다. (정규화와 비슷하지만 수준이 더 높음)
    • 백색화는 오토인코더가 좋은 자질을 학습할 수 있을지를 크게 좌우할 수 있습니다.
    • Q-1. 그럼 백색화를 왜 할까요?
      • 훈련 샘플에서 성분 간의 상관성을 제거하려고 백색화를 합니다.
    • Q-2. 정규화랑은 무슨 차이일까요?
      • 정규화는 단위 처리였던 데에 비해, 백색화는 성분 간의 관계를 수정하는 처리입니다.
  • Q. PCA 백색화ZCA 백색화는 무엇인가요?

    • 공분산행렬의 고유벡터를 이용하는 것이 샘플 집합에 대한 주성분 분석(PCA)과 일맥상통한다는 점에서 P를 PCA 백색화라고 해요.
    • (P^T)P= Φ를 만족하는 P를 대칭행렬(P=P^T)로 제한하는 방법이 ZCA 백색화라 합니다.
      • 그리고 어떤 백색화를 사용하는 경우에도 데이터에 따라 특정 성분의 분산이 매우 작거나 극단적으로 0이 되는 경우가 있어서 작은 값(ε)을 사용합니다.
      • 조금 더 설명하자면, ZCA 백색화는 각 열벡터(이미지 필터)가 하나하나 다른 픽셀을 샘플로 하고, 그 픽셀과 주위 픽셀과의 차이를 강조하는 효과(온센터 : on-center) 를 갖고 있습니다.
      • 데이터 정규화만 했을 때보다 추가적으로 ZCA 백색화를 거치면 훨씬 섬세한 패턴이 학습됩니다.
    • Q-1. PCA 백색화와 ZCA 백색화의 차이점은?
      • ZCA 백색화를 거친 샘플은 직류성분이 제거되어 이미지의 모서리가 강조되어 있는데 반해,
        PCA 백색화를 거친 샘플은 고주파성분이 이미지 전체로 강조되어 원래 이미지의 공간구조가 거의 남지 않은 것처럼 보여져요.
    • 참고 : https://withkairos.wordpress.com/2015/06/13/ufldl-tutorial-8-whitening/
  • Q. 한번 더 물을게요. DNN에서 사전훈련(pre-training) 을 왜 하죠?

    • 여러 층으로 구성된 feed-forward 신경망은 기울기 소실(gradient vanishing) 문제로 인해 일반적으로는 학습이 잘 되지 않기 때문에 여러 방법 중 하나로 사전훈련을 합니다.
    • Q-1. 사전훈련(pre-training) 의 기본적인 아이디어는 뭐죠?
      • feed-forward 신경망의 지도 학습법에서는 일반적으로 학습을 시작할 때의 초기 가중치를 랜덤값으로 초기화하는데, 이 초기값을 좀 더 좋은 값으로 정하는 것을 목표로 해요.
  • 다양한 사전훈련(pre-training) 중에서 가장 기본적인 오토인코더를 사용한 방법의 절차를 설명해주세요.

    ◎ pre-training 과정

      1. 다층 신경망을 한 층씩 여러 개의 단층 신경망으로 분할합니다.
      1. 분할한 단층 신경망을 입력층에서 가까운 순서대로 오토인코더와 같은 방법으로 비지도 학습을 수행하여 각 층의 파라미터를 결정합니다.
        • 구체적으로는, 훈련 데이터 {Xn}을 학습시켜 신경망의 가중치 W^(2)와 바이어스 b^(2)를 결정합니다.
      1. 학습한 파라미터를 이 단층 신경망에 설정한 상태에서 훈련 데이터 {Xn}을 입력하여 그 출력층의 표현 {Zn^(2)}를 구합니다.
      1. 그 인접층을 포함하는 단층 신경망을 마찬가지로 오토인코더를 만들고, 이번에는 {Zn^(2)}를 훈련 샘플로하여 비지도 학습을 수행해 W^(3)와 b^(3)를 학습합니다.
      1. 학습한 파라미터를 이 단층 신경망에 설정한 후, {Zn^(2)}를 입력하여 그 출력층의 표현 {Zn^(3)}을 구합니다.
      1. 이 과정을 층수만큼 상위층으로 올라가는 순서대로 반복한다. [이 과정을 통해 각 층의 가중치와 바이어스를 얻을 수 있음]
    • => 이러한 오토인코더를 층층이 쌓은 것을 적층 자기부호화기(stacked autoencoder) 라고 부릅니다.

      ◎ pre-training 이후 지도 학습

    • 사전훈련을 통해 얻은 파라미터를 원래의 신경망 초기값으로 설정한 뒤, 출력층을 포함하는 새로운 한 개 이상의 층을 신경망의 최상위에 추가한다.

    • 이후, 추가된 층의 가중치는 랜덤하게 초기화한 후에 당초의 목표였던 지도 학습을 수행한다.(ex 분류문제라면 출력층의 활성화 함수는 소프트맥스)

    • => 이렇게 사전훈련으로 얻은 파라미터를 초기값으로 사용한다면, 신경망의 가중치를 랜덤값으로 초기화했을 때보다 기울기 소실 문제가 발생할 가능성이 훨씬 작아지고 학습이 잘 진행된다.

  • 사전훈련이 잘 기능하는 이유는 무엇이라고 생각하시나요?

    • x의 벡터공간 내의 데이터 {Xn}의 분포를 오토인코더의 비지도 학습으로 잘 포착했기 때문이라고 추측해 볼 수 있습니다
  • 그외에 심층 오토인코더(deep autoencoder 가 있는데 이게 뭐죠?

    • 단층 feed-forward 신경망이 아니라 더 많은 층으로 구성된 오토인코더를 뜻합니다.
  • 디노이징 오토인코더(denoising autoencoder) 란 무엇인가요?

    • 디노이징 오토인코더는 오토인코더를 확장한 것으로, 학습 시에 확률적인 요소를 도입하여 결과적으로는 RBM에 맞먹는 성능을 가지게 됩니다.
    • 또한, 신경망의 구조 자체는 보통 오토인코더와 완전히 같지만, 학습 방법이 다음과 같이 일부 다릅니다.
      • 첫째, 훈련 샘플 x를 확률적으로(랜덤하게) 변동시켜 x'를 얻습니다.
        • ex) 가우스 분포를 따르는 랜덤 노이즈를 더하여 x' = x + δx 로 만듦
      • 둘째, 이렇게 만든 x'를 오토인코더에 입력하고, 부호화(인코더) 및 복호화(디코더)를 거쳐 얻은 출력이 노이즈를 더하기 전 원래 샘플 x에 가까워지도록 학습을 진행합니다.
      • => 보통의 오토인코더에서는 출력이 입력 자체에 가깝게 되도록 학습하기 때문에 x'가 입력이라면 목표 출력도 항상 x'이어야 합니다.(이 부분이 일반 오토인코더와의 차이점)
        • 그 이외에는 동일 : 출력층의 활성화 함수가 항등사상 -> 제곱오차를 오차함수로 사용, 시그모이드 함수 -> 교차엔트로피를 오차함수로 사용.
        • 이 오차가 작아지도록 신경망의 가중치와 바이어스를 확률적 경사 하강법으로 구합니다.
        • 이때 항상 xn을 조금 변동시킨 x'n을 제시하면서 원래의 xn이 출력되도록 신경망을 훈련시킵니다.
        • 훈련 후에는 입력을 재현할 수 있는 것뿐만 아니라 노이즈를 제거하는 능력을 기대할 수 있으며, 이것이 이 이름의 유래가 되었습니다.

참고하면 좋을만한 사이트

728x90
반응형
Comments