torch 初体验
学习了 pytorch
一段时间了, 但是对于 torch
的反向传播还是有一些难以理解, 因此就详细的从理论和时间的角度进行学习和实践.
首先, 手动实现以下 torch
的梯度反向传播和参数更新, 其中为了更加方便地理解, 搭配了手动实现了调用系统梯度方法.
首先, PyTorch到底是什么呢?
Torch是一个有大量机器学习算法支持的科学计算框架,是一个与Numpy类似的张量(Tensor)操作库。
PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。
但是对于PyTorch,通过反向求导技术,可以让你零延迟地任意改变神经网络的行为,而且其实现速度快。正是这一灵活性是PyTorch对比TensorFlow的最大优势。
优点:支持GPU;灵活,支持动态神经网络
;底层代码易于理解;命令式体验;自定义扩展。
缺点:全面性处于劣势,目前PyTorch还不支持快速傅里叶、沿维翻转张量和检查无穷与非数值张量;针对移动端、嵌入式部署以及高性能服务器端的部署其性能表现有待提升;其次因为这个框架较新,使得他的社区没有那么强大,在文档方面其C库大多数没有文档。
假 定 目 标 公 式 为 : y = 2 x + 1 也 就 是 : y = k x + b , k = 2 , b = 1 现 在 进 行 梯 度 求 解 , 模 拟 反 向 传 播 : l o s s = ( y p r e d − y t r u e ) 2 k _ g r a d = l o s s k ′ = 2 ( y p r e d − y t r u e ) ∗ x b _ g r a d = l o s s b ′ = 2 ( y p r e d − y t r u e ) ∗ 1 n e w _ k _ p r e d = k _ g r a d − l e a r n i n g _ r a t e ∗ k _ g r a d n e w _ b _ p r e d = b _ g r a d − l e a r n i n g _ r a t e ∗ b _ g r a d 假定目标公式为: y = 2x +1 \\ 也就是: y = kx + b, k=2,b=1 \\ 现在进行梯度求解, 模拟反向传播: \\ loss = (y_{pred} - y_{true})^2 \\ k\_grad = loss_k^{'} = 2(y_{pred} - y_{true})*x \\ b\_grad = loss_b^{'} = 2(y_{pred} - y_{true})*1 \\ new\_k\_pred = k\_grad - learning\_rate*k\_grad \\ new\_b\_pred = b\_grad - learning\_rate*b\_grad \\ 假定目标公式为:y=2x+1也就是:y=kx+b,k=2,b=1现在进行梯度求解,模拟反向传播:loss=(ypred