[Week 2-2] 📊けいしゃこうかほう
第2週火曜日傾斜降下法(純味) 傾斜降下法(辛味) 微分
変数の移動に伴う関数値の変化を測定するツールです.
ある点で関数の瞬時変化率(接線の傾き)として表すこともできます.
*Pythonでは、
接線の傾きがある点で分かれば、関数値
この点の微分値が負であれ正であれ、微分値(
(関数の凹み/凸性のため)
微分値を増やしたり減らしたりして関数極値を探す方法を傾斜上昇法/傾斜降下法と呼ぶ.機械学習では,損失関数(=誤差関数,費用関数)の最小値を探すために傾斜降下法を用いた.しかし,傾斜降下法のみを用いると,最小値ではなく極小値(local minima)に陥る可能性があるため,実際にはより完全な方法が用いられる.偏微分
xとして入力された変数関数は2 Dxy図で描画できますが、ベクトル(要素が多い)を入力した多変数関数のグラフィックはn次元空間で描画されます.しかし、直接微分すればx値の方向を移動できるのは多すぎる.多変数関数の各変数については,他の変数を定数と見なし,それ自体のみを微分(各変数の変化率をそれぞれ求める)して偏微分と呼ぶ.
勾配ベクトル∇f
多変数関数fの各変数について、偏微分をベクトルとして表し、勾配ベクトル、例えば∇と呼ぶ.デルまたはnablaと呼ばれます.
グラデーションベクトルは,多変数関数のグラフィックにおいて瞬時変化率が最も速い方向を表す.
傾斜降下法を変数関数y=axの線形回帰に適用すると、次の手順に従います.
傾斜降下法を多変数関数の線形回帰に適用することを試みた.
y = Xβ (y, βベクトルを表す
損失関数入力されたすべてのxとyの間の距離||y-Xβ||2(Root Mean Square).
XとYは固定入出力なので、修正できる変数はβすべて
したがって、β命を救うために、私たちは以下の過程を経験します.
(更新が必要な変数βすべて)
確率傾斜降下法
チルトダウン法は良いツールですが、損失関数が凸の形ではなくWの形のように極小値であって最小値ではないと最小値に収束せず、極小(局所極小)に陥る危険があります.この場合、β更新された既存の傾斜降下法の代わりに確率傾斜降下法を用いた.
確率傾斜降下法を用いて,部分データのみを用いて勾配を求め,それを利用するβ更新します.データの一部のみを用いて平均化したため,損失関数図はすべてのデータを用いた場合と若干異なる.従って、傾斜降下法で求めた勾配が0の点は、確率傾斜降下法では勾配0ではない可能性がある.それを利用して極小の場所から脱出することができます.
また,adagrad,運動量,adamなどの傾斜降下法の欠点を補う方法も多い.
授業中、私たちはお互いに理解できないところを話して、考え直しました.傾斜降下法を多変数関数に適用する場合、yは、βベクトルだとは思わなかったし、Xはマトリックスだったので混同していて、チームメンバーの説明を聞いて、私が説明できる部分も説明してくれて、もっとはっきり理解させてくれました.
また,今後の課題でコードレビューを行うために,我々チームのGithubレコードを別途作成した.
📉[傾斜降下法(マイルドな味)]
変数の移動に伴う関数値の変化を測定するツールです.
ある点で関数の瞬時変化率(接線の傾き)として表すこともできます.
*Pythonでは、
sympy
モジュールのdiff()
関数を使用して微分できます.f(x)
を増加/減少させるためにx値をどの方向に移動すべきかを知ることができる.この点の微分値が負であれ正であれ、微分値(
f(x-f'(x))
)を減算すると関数値が減少し、微分値(f(x+f'(x))
)を加えると関数値が増加する.(関数の凹み/凸性のため)
微分値を増やしたり減らしたりして関数極値を探す方法を傾斜上昇法/傾斜降下法と呼ぶ.機械学習では,損失関数(=誤差関数,費用関数)の最小値を探すために傾斜降下法を用いた.しかし,傾斜降下法のみを用いると,最小値ではなく極小値(local minima)に陥る可能性があるため,実際にはより完全な方法が用いられる.
xとして入力された変数関数は2 Dxy図で描画できますが、ベクトル(要素が多い)を入力した多変数関数のグラフィックはn次元空間で描画されます.しかし、直接微分すればx値の方向を移動できるのは多すぎる.多変数関数の各変数については,他の変数を定数と見なし,それ自体のみを微分(各変数の変化率をそれぞれ求める)して偏微分と呼ぶ.
多変数関数fの各変数について、偏微分をベクトルとして表し、勾配ベクトル、例えば∇と呼ぶ.デルまたはnablaと呼ばれます.
グラデーションベクトルは,多変数関数のグラフィックにおいて瞬時変化率が最も速い方向を表す.
傾斜降下法を変数関数y=axの線形回帰に適用すると、次の手順に従います.
beta = init # 초기값을 지정
grad = gradient(beta) # 미분값 계산하는 함수
while abs(grad) > eps: # eps : 입실론(기울기가 이 값 이하로 내려가면 반복 중단)
beta = beta - lr * grad # lr : learning rate, beta를 업데이트하기 위한 '보폭' 을 결정
grad = gradient(beta)
📉[傾斜降下法(辛味)]
傾斜降下法を多変数関数の線形回帰に適用することを試みた.
y = Xβ (y, βベクトルを表す
損失関数入力されたすべてのxとyの間の距離||y-Xβ||2(Root Mean Square).
XとYは固定入出力なので、修正できる変数はβすべて
したがって、β命を救うために、私たちは以下の過程を経験します.
(更新が必要な変数βすべて)
beta = [init] # 다변수함수라 하나의 입력 x가 벡터, beta도 벡터
for i in range(T): # T:반복횟수 (종료조건을 이렇게 할 수도 있다)
error = y - X @ beta # X는 행렬, beta는 벡터라 행렬곱 계산
grad = -transpose(X) @ error # X^T에 error를 곱해주면 gradient
beta = beta - lr * grad # grad를 빼는 이유는?
# 위의 그래프처럼 β값을 옮겨 함수값을 감소시키기 위해서.
いちじけいしゃβ任意のベクトルとして定義し、損失関数(誤差)を計算します.損失関数が小さくなる方向へβ更新β勾配*lrを減算します.学習率はlr
で、β 更新する「歩幅」を決定します.歩幅が大きすぎて極小に収束せず、歩幅が小さすぎて時間が長すぎる.チルトダウン法は良いツールですが、損失関数が凸の形ではなくWの形のように極小値であって最小値ではないと最小値に収束せず、極小(局所極小)に陥る危険があります.この場合、β更新された既存の傾斜降下法の代わりに確率傾斜降下法を用いた.
また,adagrad,運動量,adamなどの傾斜降下法の欠点を補う方法も多い.
👨👩👧👦[ピアセッション]
授業中、私たちはお互いに理解できないところを話して、考え直しました.傾斜降下法を多変数関数に適用する場合、yは、βベクトルだとは思わなかったし、Xはマトリックスだったので混同していて、チームメンバーの説明を聞いて、私が説明できる部分も説明してくれて、もっとはっきり理解させてくれました.
また,今後の課題でコードレビューを行うために,我々チームのGithubレコードを別途作成した.
Reference
この問題について([Week 2-2] 📊けいしゃこうかほう), 我々は、より多くの情報をここで見つけました https://velog.io/@zeen263/Week-2-2-경사-하강법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol