tensorflow学习笔记(三)

tensorflow学习笔记(三)–前向传播与反向传播

今天,主要学习的是神经网络中的前向传播和反向传播,先以单变量单神经元为例,进行解释,再结合到多变量多神经元的情况。博文为原创,转载需要注明出处,谢谢~

单个神经元网络

对于单变量,其前向传播很简单,为一元线性回归h(x) = W*x + B,其中参数W为权重,B为偏置项。那么其反向传播又是怎么的??
首先,反向传播主要是根据预测值与真实值之间的误差来调整参数w和b的。而衡量预测值与实际值之间的误差的函数为代价函数(也称损失函数),单变量的线性回归其代价函数J(W, B)的表达式为:
代价函数
其中,n为样本数量,h(x)为预测值,y为实际值。
那么,为了使得实际值与预测值之间的损失最小,即代价函数达到最小值,一般使用梯度下降算法。

梯度下降算法

梯度下降算法是一个用来求函数最小值的算法,在机器学习中,用于优化单个参数的取值;在反向传播中,对所有的参数使用梯度下降算法,能使得神经网络模型在训练数据上的损失函数尽可能取到最小值。

损失函数

假设,用a表示神经网络中的参数,J(a)表示在给定的参数取值下训练数据集上的损失函数的大小。

梯度下降
曲线表示了在参数a取不同值时,对应损失函数J(a)值的大小,参数的梯度是通过求偏导得到的
梯度更新公式

拿上面一元线性回归方程h(x)=Wx+B,作为例子,假设n=1,其代价函数为J(W,B)=1/2(Wx+B-y)²:

在反向传播中,我们需要知道参数W和B对h(x)的贡献,故分别对W和B求偏导,得到:
偏导
如果需要知道参数x的梯度,那么对x求偏导,得到:

x的梯度
那么使用梯度下降算法每次对参数x的更新公式为
x的更新公式
假设参数的初始值为5,学习率为0.01,W=2,B=1,y=(1,2,3,4,5)那么整个优化过程总结为:

轮数当前轮的参数值梯度*学习率更新后的参数
150.01x(25x5-5x1-5x1) =1.155-1.15=3.85
23.850.01x(25x3.85-5x1-5x2)=0.81253.85-0.8125=3.0375
33.03750.01x(25x3.0375-5x1-5x3)=0.55943.0375-0.5594=2.4781
42.47810.01x(25x2.4781-5x1-5x4)=0.36952.4781-0.3695=2.1085
52.10850.01x(25x2.1085-5x1-5x5)=0.22712.1085-0.2271=1.8814

从上表可以看到,经过5次迭代之后,参数x的值变成了1.8814。

需要注意的:梯度下降算法不能保证被优化的函数达到全局最优解,只能是局部最优。只有当损失函数为凸函数时,梯度下降算法才能达到全局最优。

多元神经网络

对于多变量,其前向传播就为多元线性回归h(x) = W0 + W1 * x1 + W2 * x2 +… +Wn*xn + B;同样地,其代价函数为:
多元代价函数
同样对每个参数的梯度下降更新公式与上述类似推导,这里就不演示了。
上面,我只采用了线性回归作为例子,来解释反向传播和梯度下降算法,在实际中应用,每个参数的偏导要根据具体代价函数来求得。

在tensorflow中的实现

在tensorflow中,学习率的设置方式一般为指数衰减法,其代码为:

learning_rate = tf.train.exponential_decay(
					0.1, global_step, 100, 0.96, staircase=True)

通过梯度下降算法更新所有参数与学习率:

learning_rate = tf.train.GradientDesentOptimizer(learning_rate).minimizer(..loss函数., global_step=globel_step)

以上为反向传播和梯度下降的笔记,本博客为原创,转载需要注明出处!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值