PyTorch로 기울기 이미지를 잡아라.
소개
이 기사는 후루카와 연구실 Workout calendar 9일째의 기사입니다. 본 기사는 후루카와 연구실의 학생이 학습의 일환으로서 쓴 것입니다.
Workout_calendar 고조되어 기쁩니다. 이번 주 금요일에 드디어 신입생의 투고가 시작됩니다!
이 기사의 목적
Pytorch의 자동 미분 기능을 사용하여 기울기 방법을 실현합니다!
[이것을 구현합니다]
최급강하법
그라디언트 방법으로 가장 간단한 방법입니다.
기울기 방법은 $n$다음 벡터 $\mathbf{x} = (x_1,x_2,...,x_n)$ 을 인수로 하는 맵 $f(\mathbf{x})$ 의 극값을 구하는 기법 중 하나 하나입니다.
반복, 학습을 반복하여 $\mathbf {x} $를 업데이트하십시오.
$ t $ 시간에 대한 학습 솔루션이 $\mathbf {x} ^ { (t)} $이면 가장 가파른 하강 방법은 다음과 같이 값을 업데이트합니다.
\begin{align}
\mathbf{x}^{(t+1)} &= \mathbf{x}^{(t)}-\eta \operatorname{grad} f\left(\mathbf{x}^{(t)}\right) \\
\\
&= \mathbf{x}^{(t)}-\eta \left[\begin{array}{c}{\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{1}^{(t)}}} \\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{2}^{(t)}}} \\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{2}^{(k)}}} \\ ・\\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{n}^{(k)}}}\end{array}\right]
\end{align}
여기서 $\eta$는 스텝폭이다. 스텝폭이 커지면 갱신량은 커지지만 발산의 우려가 있다. 반대로 스텝폭이 너무 작으면 학습은 지연된다.
구현
이번에 사용할 매핑(함수): $$ E(\mathbf{x}) = x_1^2 + x_2^2$$
gradient_descent.py
n_epoch = 200 # 学習回数
eta = 0.01 # ステップ幅
x = torch.tensor([2.0,2.0],requires_grad=True) # (x_1, x_2)
A = torch.tensor([[1.0,0.0],[0.0,1.0]])
for epoch in range(n_epoch):
quad = torch.einsum("i,ij,j",x,A,x) # f
quad.backward()
with torch.no_grad():
x = x - eta * x.grad
x.requires_grad = True
구현 메모
$\mathbf {x} $ : option에 requires_grad = True가 필요합니다.
$ quad $ : 편도 함수는 스칼라 값이어야합니다.
결과
파란색 매트는 이번 함수의 형태로, 검정색 $x$ 는 $t$ 시간 눈의 갱신하는 점입니다. 노란색 점선은 학습의 궤적이 되고 있습니다. mathbf {x} $의 구성 요소에서 세로축 (z)은 함수의 값입니다.
$ (x_1, x_2) = (2.0, 2.0) $을 초기 값으로 사용하여 함수의 최소값을 향하고 있음을 확인했습니다.
요약
다음은 이것과 이전에 언급 한 Nadaraya-Watson 추정의 구현을 결합하여 자신의 연구 기반 기술을 실현하려고합니다.
참고 페이지
Wiki
소스 코드
이번에도 Github과 Colab에 소스 코드를 올리고 있습니다.
뷰어로 움직이고 싶은 분은 좋으면 참조하십시오.
Special Thanks
코드 제공: Watanabe
Reference
이 문제에 관하여(PyTorch로 기울기 이미지를 잡아라.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kpasso1015/items/d20f2ff323c0eb4526f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Pytorch의 자동 미분 기능을 사용하여 기울기 방법을 실현합니다!
[이것을 구현합니다]
최급강하법
그라디언트 방법으로 가장 간단한 방법입니다.
기울기 방법은 $n$다음 벡터 $\mathbf{x} = (x_1,x_2,...,x_n)$ 을 인수로 하는 맵 $f(\mathbf{x})$ 의 극값을 구하는 기법 중 하나 하나입니다.
반복, 학습을 반복하여 $\mathbf {x} $를 업데이트하십시오.
$ t $ 시간에 대한 학습 솔루션이 $\mathbf {x} ^ { (t)} $이면 가장 가파른 하강 방법은 다음과 같이 값을 업데이트합니다.
\begin{align}
\mathbf{x}^{(t+1)} &= \mathbf{x}^{(t)}-\eta \operatorname{grad} f\left(\mathbf{x}^{(t)}\right) \\
\\
&= \mathbf{x}^{(t)}-\eta \left[\begin{array}{c}{\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{1}^{(t)}}} \\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{2}^{(t)}}} \\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{2}^{(k)}}} \\ ・\\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{n}^{(k)}}}\end{array}\right]
\end{align}
여기서 $\eta$는 스텝폭이다. 스텝폭이 커지면 갱신량은 커지지만 발산의 우려가 있다. 반대로 스텝폭이 너무 작으면 학습은 지연된다.
구현
이번에 사용할 매핑(함수): $$ E(\mathbf{x}) = x_1^2 + x_2^2$$
gradient_descent.py
n_epoch = 200 # 学習回数
eta = 0.01 # ステップ幅
x = torch.tensor([2.0,2.0],requires_grad=True) # (x_1, x_2)
A = torch.tensor([[1.0,0.0],[0.0,1.0]])
for epoch in range(n_epoch):
quad = torch.einsum("i,ij,j",x,A,x) # f
quad.backward()
with torch.no_grad():
x = x - eta * x.grad
x.requires_grad = True
구현 메모
$\mathbf {x} $ : option에 requires_grad = True가 필요합니다.
$ quad $ : 편도 함수는 스칼라 값이어야합니다.
결과
파란색 매트는 이번 함수의 형태로, 검정색 $x$ 는 $t$ 시간 눈의 갱신하는 점입니다. 노란색 점선은 학습의 궤적이 되고 있습니다. mathbf {x} $의 구성 요소에서 세로축 (z)은 함수의 값입니다.
$ (x_1, x_2) = (2.0, 2.0) $을 초기 값으로 사용하여 함수의 최소값을 향하고 있음을 확인했습니다.
요약
다음은 이것과 이전에 언급 한 Nadaraya-Watson 추정의 구현을 결합하여 자신의 연구 기반 기술을 실현하려고합니다.
참고 페이지
Wiki
소스 코드
이번에도 Github과 Colab에 소스 코드를 올리고 있습니다.
뷰어로 움직이고 싶은 분은 좋으면 참조하십시오.
Special Thanks
코드 제공: Watanabe
Reference
이 문제에 관하여(PyTorch로 기울기 이미지를 잡아라.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kpasso1015/items/d20f2ff323c0eb4526f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
\begin{align}
\mathbf{x}^{(t+1)} &= \mathbf{x}^{(t)}-\eta \operatorname{grad} f\left(\mathbf{x}^{(t)}\right) \\
\\
&= \mathbf{x}^{(t)}-\eta \left[\begin{array}{c}{\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{1}^{(t)}}} \\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{2}^{(t)}}} \\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{2}^{(k)}}} \\ ・\\ {\frac{\partial f\left(\mathbf{x}^{(t)}\right)}{\partial x_{n}^{(k)}}}\end{array}\right]
\end{align}
n_epoch = 200 # 学習回数
eta = 0.01 # ステップ幅
x = torch.tensor([2.0,2.0],requires_grad=True) # (x_1, x_2)
A = torch.tensor([[1.0,0.0],[0.0,1.0]])
for epoch in range(n_epoch):
quad = torch.einsum("i,ij,j",x,A,x) # f
quad.backward()
with torch.no_grad():
x = x - eta * x.grad
x.requires_grad = True
Reference
이 문제에 관하여(PyTorch로 기울기 이미지를 잡아라.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kpasso1015/items/d20f2ff323c0eb4526f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)