[boostcamp-ai-tech][AI-Math] 3, 4. チルトダウン法


3.傾斜降下法(柔らかい味)

  • カタログ
  • 微分って何?
  • 傾斜降下法・傾斜上昇法
  • 偏微分
  • 微分とは何ですか。

  • 微分は変数の移動に伴って変化する関数値を測定するためのツールであり、最適化において最も一般的な方法である.
  • 微分=変化率の限界(limit)!!

  • f(x)f(x)f(x)=x 2+2 x+3 x^2+2 x+3 x+3 x 2+2 x+3を微分する.

  • hをゼロの限界とし、
    f′f{\prime}f′(x) = 2x+22x + 22x+2

  • 実施:sympy.diff
    import sympy as sym
    from sympy.abc import x
    
    sys.diff(sym.poly(x**2 + 2*x + 3), x)
    
    >>>> Poly(2*x _ 2, x, domain = 'zz')
  • けいしゃこうかほう


  • 微分は関数fffの与えられた点(x,f(x))(x,f(x))(x,f(x))上の接線の傾きを求める.

  • 接線が1つの点で傾斜していることを知っていれば、関数値を増やしたり減らしたりするために、その点がどの方向に移動すべきかを知ることができます.
  • 微分値加算を勾配上昇法と呼び、関数の極大値位置を求める(目的関数を最大化する場合)
  • 微分値を減算することを勾配降下法といい、関数の極小値を求める位置(目的関数を最小化する場合)
    ->極値に達したとき(微分値0)に移動を停止します.(目標関数最適化終了)

  • チルトダウンチルトダウン:アルゴリズムアルゴリズム
  • 計算機で計算すると微分が正確にゼロにならないため、別途の終了条件が必要
  • var = init  # 시작점
    grad = gradient(var)  # 미분값을 계산해주는 함수 
    while(abs(grad) > eps):  # 미분값이 종료조건(eps)보다 작아지면 종료
        var = var - lr * grad  # 정해놓은 학습률로 미분 업데이트 속도를 조절
        grad = gradient(var)  # 업데이트

    変数がベクトルなら?偏微分!

  • ベクトルが入力の多変数関数である場合は、偏微分を用いる.
  • 偏微分:特定方向の座標軸に移動することにより微分する.
  • 偏微分は、与えられた関数の変数個数から算出できる

  • ベクトルeのi(eieiei)を変更する単位ベクトル(ベクトルeのi)の変化率しか計算できません.

  • ex)
    xの偏微分->yを定数として微分する(x方向の動きのみを見る)

  • 上記問題に対する偏微分実現:sympy.diff
    import sympy as sym
    from sympy.abc import x, y
    
    sys.diff(sym.poly(x**2 + 2*x*y + 3) + sym.cos(x + 2*y), x)
    
    >>>> 2*x + 2*y - sin(x + 2*y)

  • 各変数の偏微分を計算する勾配ベクトルを用いて,傾斜降下/傾斜上昇法に用いることができる

    ベクトルfnabla f∇f(nabla∇==nabla!)変数x=(x 1,...,xd)x=(x 1,...,xd)x=(x 1,...,xd)!

  • 傾斜降下(勾配ベクトル):アルゴリズム
  • 傾斜降下法アルゴリズムは依然として適用される.しかし、ベクトルは絶対値ではなく賭け(norm)を計算することによって終了条件を設定しなければならない.
  • var = init  # 시작점
    grad = gradient(var)  # 미분값을 계산해주는 함수 
    while(norm(grad) > eps):  # 미분값이 종료조건(eps)보다 작아지면 종료
        var = var - lr * grad  # 정해놓은 학습률로 미분 업데이트 속도를 조절
        grad = gradient(var)  # 업데이트

    4.傾斜降下法(辛味)

  • カタログ
  • 線形回帰解析復習(類似ドメイン行列)
  • 傾斜降下法で線形回帰係数を求める
  • 確率傾斜降下法
  • 線形回帰分析復習

  • そうじぎゃくぎょうれつデータを線形モデルで解釈する線形回帰式が見つかる
  • XXXβ\betaβ = y^\hat{y}y^​ ≈\approx≈ yyy -> 😁
    -> β\betaβ = X+yX^+yX+y
    -> β\betaβ = (XTX)−1XTy(X^TX)^{-1}X^Ty(XTX)−1XTy
  • このようにMoore-Penrose逆行列を用いてyに近いy^hat{y}y^(L 2 L 2 L 2-賭けを最小化する係数)を見つけることができるβ\betaβ)
  • 傾斜降下法で線形回帰係数を求める


  • 線形回帰の目的式はβ∣∣2||y-X\beta||_2∣∣y−Xβ∣∣2,β\betaβ検索が必要なため、次の勾配ベクトルを求める必要があります.

    目的の儀式.β\betaβ次のβ\betaβ微分値を減算すると最小点を求めることができます

  • 学習率λ\lambdaλβの偏微分の勾配ベクトルの値を乗算します.β(t)\beta^{(t)}β(t)から外せばいいです.


  • 複雑に見えますが、実はXβX\betaXβけいすうβ\betaβ微分結果XTX^TXTのみを掛けます.
  • 傾斜降下法による線形回帰:アルゴリズム
  • 終了条件を一定学習回数に変更した点以外は、前学習のチルトダウンアルゴリズムと同じ
  • for t in range(T):  # 정해진 횟수가 종료조건
        error = y - X @ beta  # @ -> 행렬곱(numpy)
        grad = - transpose(X) @ error  # 그레디언트 벡터
        beta = beta - lr * grad
    ∇β∣∣y−Xβ∣∣22\nabla_\beta||y-X\beta||^2_2∇β​∣∣y−Xβ∣∣22項計算β\betaβ更新します.
    **傾斜降下アルゴリズムでは,学習率(lr)と学習回数が重要なスーパーパラメータとなる.
    **特に線形回帰、目標式β∣∣2||y-X\beta||_2∣∣y−Xβ∣∣2は回帰係数であるβ\betaβ凸関数であるため,アルゴリズムを十分に回転させると収束が保証されるが,非線形回帰問題ではターゲット関数が凸でない可能性があるため,狩猟は必ずしも保証されない(特に深さ学習)🥲).

    かくりつけいしゃこうかほう

  • 確率勾配降下法は、すべてのデータを用いて更新するのではなく、1つまたは一部のデータを用いて更新する.
  • 部分使用:ミニ構成.ミニレイアウトは確率的に選択され、ターゲット形状が変更されます(毎回逆のミニレイアウトが使用されるため).
  • SGDは万能ではないが,深さ学習ではSGDが傾斜降下法より優れていることが実証されている.
  • 非凸目的式はSGDで最適化できる.
  • SGDは、一部のデータ更新パラメータを用いて、計算リソースのより効率的な利用に寄与する.
  • 補足資料
  • chain rule説明
  • けいしゃこうかほう実施・補足説明