사전 학습 알고리즘

2820 단어 기계 학습Python
불꽃이 사방으로 튀다jupter notebook에서 제12장의 사전 학습 알고리즘을 실현했다.jupter notebook에 대한 링크

결실


바바라에서 8x8 패치 약 2만5천개를 추출해 사전 학습을 진행했다.

2D 분리형 DCT 사전을 초기값으로 사용

K-SVD법으로 패치로부터 배운 사전

사전을 학습함으로써 해석 표현 오차를 줄였다.

K-SVD 알고리즘

  • 신호 실례 $Y:n\times M$(n은 신호의 차원이고 M은 실례수)
  • 해석 표시 $X:m\times M$(m은 해석 표시 벡터의 차원)
  • 사전 $A:n\times m 달러
  • $k_0달러짜리 요소만 0달러가 아닌 $xi$$y멋지게 표현하다

    작업:

    \min_{A,\{x_i\}^{M}_{1}} \Sigma_{i=1}^{M} ||y_i-Ax_i|| \text{ subject to } ||x_{i}||_0 \leq k_{0}, 1 \leq i \leq M
    

    초기화:


    $k=0$으로
  • 초기 사전: 먼저 8×11 차원 DCT 매트릭스 $A달러 생성k번째 원자$(k=1,2,\dots,11)달러는
  • $a^{1D}_{k}=\cos((i-1)(k-1)\pi/11),(i=1,2,\dots,8)$
    .첫 번째 원자탄을 제외한 원자탄은 모두 제거되었다
    $A_{2D} = A_{1D}\otimes A_{1D}$
    초기 사전이 만들어졌습니다.
  • 귀일화: $A의 열을 귀일화
  • 주 주기:


    $+1으로 다음 절차를 수행합니다.
  • 해석 인코딩: 추적 알고리즘을 사용하여 다음과 같다.
  • \hat{x_{i}} = \arg \min_{x} ||y_{i} - Ax||_{2}^{2} \text{ subject to } ||x||_{0} \leq k_{0}
    
    그런 다음 $1\leqi\leq M달러의 해석 벡터에 대해 $\hat{x}{i} 달러를 받았습니다.이것들을 사용하여 행렬 $X$을 만듭니다.
  • K-SVD 사전 업데이트: 다음 절차에 따라 사전 열을 업데이트하면 $A를 받을 수 있습니다.
      $j_0=1,2,\dots, m$에 대해 반복합니다.
  • 아동목$a{j{0} 달러 정의 사례 집합을 사용합니다. $\Omega_{j_{0}} =\{ i|1\leq i\leq M, X[j_{0}, i]\neq 0\}$$
  • 계산 잔차 행렬E_{j_{0}} = Y -\Sigma_{j\neq j_{0}} a_{j}x_{j}^{T} $$
  • $E_${j{0} - $Omega{j{0}$E$에 해당하는 열만 가져오기{j{0}^{R}달러입니다.
  • 달러SVD용 달러, 달러 E{j{0}^{R} = U\Delta V 달러.그리고 사전의 아동목.{j_{0}} = u_{1}$, 표현 벡터를 $x로 설정{j_{0}}^{R}=\Delta[1, 1]v_{1]^{T}을(를) $로 업데이트합니다.
  • 중지 조건: $|Y-AX|^{2}{F} 달러의 변화가 충분하면 끝납니다. 그렇지 않으면 반복됩니다.
  • 출력:


    결과는 $A 입니다.

    참고 자료

  • M.Elad 저서, 옥목철역, 불꽃사방, 제12장
  • https://github.com/greyhill/pypbip/blob/master/ksvd.py
  • 좋은 웹페이지 즐겨찾기