博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习数学知识
阅读量:6948 次
发布时间:2019-06-27

本文共 1932 字,大约阅读时间需要 6 分钟。

hot3.png

1.矩阵的乘法

 

1.1点积:普通矩运算

1.2内积: 矩阵  与  矩阵  的Hadamard积记为  。其元素定义为两个矩阵对应元素的乘积  的m×n矩阵

1.3外积:Kronecker积是两个任意大小的矩阵间的运算,表示为  。克罗内克积也成为或

1.4元素积:

224349_SQK1_2643893.png224405_Dt5z_2643893.png

224844_XU6q_2643893.png

2.softmax在神经网络简化计算的相关推导

softmax相关求导

当我们对分类的Loss进行改进的时候,我们要通过梯度下降,每次优化一个step大小的梯度,这个时候我们就要求Loss对每个权重矩阵的偏导,然后应用链式法则。那么这个过程的第一步,就是对softmax求导传回去,不用着急,我后面会举例子非常详细的说明。在这个过程中,你会发现用了softmax函数之后,梯度求导过程非常非常方便!

下面我们举出一个简单例子,原理一样,目的是为了帮助大家容易理解!

20134515_fm2z.jpg

 

我们能得到下面公式:

z4 = w41*o1+w42*o2+w43*o3

z5 = w51*o1+w52*o2+w53*o3

z6 = w61*o1+w62*o2+w63*o3

z4,z5,z6分别代表结点4,5,6的输出,01,02,03代表是结点1,2,3往后传的输入.

那么我们可以经过softmax函数得到

好了,我们的重头戏来了,怎么根据求梯度,然后利用梯度下降方法更新梯度!

要使用梯度下降,肯定需要一个损失函数,这里我们使用交叉熵作为我们的损失函数,为什么使用交叉熵损失函数,不是这篇文章重点,后面有时间会单独写一下为什么要用到交叉熵函数(这里我们默认选取它作为损失函数)

交叉熵函数形式如下:

其中y代表我们的真实值,a代表我们softmax求出的值。i代表的是输出结点的标号!在上面例子,i就可以取值为4,5,6三个结点(当然我这里只是为了简单,真实应用中可能有很多结点

现在看起来是不是感觉复杂了,居然还有累和,然后还要求导,每一个a都是softmax之后的形式!

但是实际上不是这样的,我们往往在真实中,如果只预测一个结果,那么在目标中只有一个结点的值为1,比如我认为在该状态下,我想要输出的是第四个动作(第四个结点),那么训练数据的输出就是a4 = 1,a5=0,a6=0,哎呀,这太好了,除了一个为1,其它都是0,那么所谓的求和符合,就是一个幌子,我可以去掉啦!

为了形式化说明,我这里认为训练数据的真实输出为第j个为1,其它均为0!

那么Loss就变成了,累和已经去掉了,太好了。现在我们要开始求导数了!

我们在整理一下上面公式,为了更加明白的看出相关变量的关系:

其中,那么形式变为

那么形式越来越简单了,求导分析如下:

参数的形式在该例子中,总共分为w41,w42,w43,w51,w52,w53,w61,w62,w63.这些,那么比如我要求出w41,w42,w43的偏导,就需要将Loss函数求偏导传到结点4,然后再利用链式法则继续求导即可,举个例子此时求w41的偏导为:

20134515_kzm6.jpg

 

w51.....w63等参数的偏导同理可以求出,那么我们的关键就在于Loss函数对于结点4,5,6的偏导怎么求,如下:

这里分为俩种情况:

 

20134515_96kG.jpg

j=i对应例子里就是如下图所示:

 

比如我选定了j为4,那么就是说我现在求导传到4结点这!

 

20134516_aZja.jpg

那么由上面求导结果再乘以交叉熵损失函数求导

 

,它的导数为,与上面相乘为(形式非常简单,这说明我只要正向求一次得出结果,然后反向传梯度的时候,只需要将它结果减1即可,后面还会举例子!)那么我们可以得到Loss对于4结点的偏导就求出了了(这里假定4是我们的预计输出

第二种情况为:

20134516_UR47.jpg

这里对应我的例子图如下,我这时对的是j不等于i,往前传:

20134516_cwN6.jpg

 

那么由上面求导结果再乘以交叉熵损失函数求导

,它的导数为,与上面相乘为(形式非常简单,这说明我只要正向求一次得出结果,然后反向传梯度的时候,只需要将它结果保存即可,后续例子会讲到这里就求出了除4之外的其它所有结点的偏导,然后利用链式法则继续传递过去即可!我们的问题也就解决了!

下面我举个例子来说明为什么计算会比较方便,给大家一个直观的理解

举个例子,通过若干层的计算,最后得到的某个训练样本的向量的分数是[ 2, 3, 4 ], 

那么经过softmax函数作用后概率分别就是=[
,,] = [0.0903,0.2447,0.665],如果这个样本正确的分类是第二个的话,那么计算出来的偏导就是[0.0903,0.2447-1,0.665]=[0.0903,-0.7553,0.665],是不是非常简单!!然后再根据这个进行back propagation就可以了

 

转载于:https://my.oschina.net/flzxsqc/blog/1589457

你可能感兴趣的文章
FreeCodeCamp:Chunky Monkey
查看>>
MySQL数据库/数据表/字段--字符集查看/修改
查看>>
JavaScript核心语法学习部分(五)
查看>>
Error: php71w-common conflicts with php-common-5.4.16-46.el7.x86_64
查看>>
初探 回文树
查看>>
SQL根据列值查询表
查看>>
php 操作webservice实例
查看>>
Python初学练习03:简易ATM系统-前端
查看>>
浮点数到整数的快速转换
查看>>
cacti服务器处理
查看>>
我的友情链接
查看>>
搭建zabbix遇到的问题
查看>>
Linux搭建quota
查看>>
ubuntu下安装redmine及其邮件发送的配置
查看>>
单向路由
查看>>
简易自制存储Nexenta 4.0.2 ,可以试试100MB+的自制nas哦。。。
查看>>
【转】经典SQL语句大全
查看>>
高效制冷与自然冷却并重
查看>>
怎么解决内存不足以及IE弹出提示:此网页上的问题导致internet explorer关闭并重试...
查看>>
Django Admin 添加readonly用户
查看>>