TensorFlow笔记四

TensorFlow笔记四

++@Author:LF
@Date:2017-12-29++

昨天学习了前向传播算法,今天了解一下反向传播算法相关内容。

一、损失函数

多个样例数据进行前向传播后会得到一组输出,每个样例数据同时对应了一组正确答案,而模型的输出数据与正确答案之间的差距需要表示用以反向调整参数。这个过程即反向传播的过程,表示模型的输出数据与正确答案之剑差距的函数即损失函数。损失函数可以自定义,TensorFlow也给出常用的损失函数。
计算交叉熵是常用的损失函数之一。那么交叉熵是啥呢?

这里写图片描述

百度一波的结果,好吧,不太懂。但是从反向传播的意义来看应该是描述了两个量之间的差距吧。
根据求交叉熵公式化简得:

公式1

此处p为正确值,q为预测值,那么H(p,q)就表示了对于正确值p而言q与它的距离?(书上说是p和q之间的概率分布,表示没学过概率论不太懂。。。)。
举个例子来说明这个交叉熵的公式,比如正确值p为(1,0),预测值为q(0.5,0.4),那么这个预测值与正确值之间的交叉熵为:

公式2

如果此时有另一个预测值q为(0.8,0.6),那么这个预测值与正确值之间的交叉熵为:

公式3

其实可以很直观的看出交叉熵值越小,它表示预测值越接近正确值。
下面贴出TensorFlow中交叉熵的损失函数代码:

Corss_entropy = -tf.reduce_mean( y_*tf.log ( tf.clip_by_value(y,1e-10,1.0)))

其实这段代码计算交叉熵有三个过程:

==1、tf.clip_by_value(x,a,b)==

这段代码的意思是将X的值锁定在a~b之间,即将大于b和小于a的值去掉替换成相应的阈值(大于b换成b,小于a换成a),这里对预测值y进行约束是为了减小错误率。因为正确结果y_和y均是用概率进行描述的,概率的取值在0~1之间(个人理解。。。),所以这里进行了一个人工约束减小错误几率。

==2、tf.log(x)==

顾名思义,对X取对数。

==3、tf.reduce_mean()==

其实这个函数并不是特别懂,但是比对公式,应该是针对矩阵这一类而言的。比如一个n*m矩阵中,有n组预测数据,每组预测数据分别取交叉熵求和得到一组预测数据的交叉熵,再作n组求和取平均得到平均交叉熵。reduce_mean()应该就是起到这个作用。
到此求交叉熵的过程就搞懂了,求交叉熵也就是作损失函数的过程。但是前面其实有个坑没填,就是为啥正确结果_y和预测结果y是用概率进行描述的呢?为啥输出的值一定要约束在0~1之间呢?换言之如何做到把神经网络的输出变成一个概率分布呢?这就引出了下面一个问题——softmax回归。

二、Softmax回归

怎么说呢,没学过概率论,数学也差其实是真的不太想理清楚这边的思路。但是没办法,硬着头皮看了点,有了一点自己的理解。Softmax回归其实是logistic回归的一种推广,那么logistic回归是啥呢,它是一种广义线性回归,针对二分问题。那么线性回归是啥呢,线性回归是描述一连串变量之间的权重的东西。举个例子,我有一个神奇的饮料配方,喝了可以长生不老,这个饮料的配方由水、食用油、醋构成,必须按照一定的比例勾兑才可以减小,那么这个水和食用油还有醋的比例是多少呢?就可以由一个线性回归方程表示(感觉有点蹩脚。。数学渣只能理解到这里)。那么logistic回归专门针对因变量有两个的情况下,而softmax回归则是将其推广到多个因变量的情况。
Softmax回归公式:

公式4

这里先贴出几个博客地址,里面详细的讲解了相关回归的原理。
Softmax回归:
http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
Logistic回归:
https://baike.baidu.com/item/logistic%E5%9B%9E%E5%BD%92/2981575?fr=aladdin
嗯,反正我只要知道正确值和预测值是一般通过softmax回归处理后形成了概率分布然后可以使用求交叉熵来描述损失函数就好了= =。
同时,Tensorflow提供了softmax回归后求交叉熵的代码:
Cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y,y_)
不得不吐槽一句,tensorflow的方法名真是长。。。

三、总结

回头一看,今晚研究的基本都是数学问题,数学不好的我表示很伤。。本来打算今晚搞定一个二分类问题的简单的神经网络模型,不过看起来简单,其实深挖下去的确不简单,很多零碎的知识(绝大部分是数学)。不过其实了解的越多,神经网络的影子在脑海里显现的越清楚,这算是一件好事吧。今晚主要了解了一种常用的损失函数——求交叉熵,主要应用于分类问题。还有与交叉熵配合使用的softmax线性回归可以将输出概率化。其实还有一类预测问题,常用的损失函数是均方误差,对于二分类问题的神经网络模型中,反向传播的优化算法有常用的三个,准备明晚再搞懂一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值