求导公式

是时候搞定矩阵微分了!

丶灬走出姿态 提交于 2019-12-03 07:02:01
前言与感谢 以前就对矩阵求导有心理阴影,到底要不要转置,哪个矩阵放在前面,哪个矩阵放在后面,链式法则怎么搞,由产生此类一系列让人头大的问题。其中,最令人智熄的是经常网上的一些算法公式推导根本是错误的,因为矩阵维数根本不匹配,故这些无良的发布者可能根本就没有手推过,天天搞复制黏贴大法,很多时候都是大量重复错误的内容。最近读了一些材料,感觉心中有了一些数,因此想通过本文总结,一次性梳理清楚。是时候搞定矩阵微分了! 参考材料: Kaare Brandt Petersen, Michael Syskind Pedersen. "The Matrix Cookbook", 2008 Thomas P. Minka. "Old and New Matrix Algebra Useful for Statistics", 2000 Searle Shayle R. "Matrix Algebra Useful for Statistics", 1982 Jan R. Magnus, Heinz Neudecker. "Matrix Differential Calculus with Applications in Statistics and Econometrics", 2007 "Matrix Vector Derivatives for Machine Learning", (作者邮箱

多项式求导--设计思路

匿名 (未验证) 提交于 2019-12-02 23:47:01
需要完成的任务为包含简单幂函数和简单正余弦函数的导函数的求解。 本次多项式求导具体包括以下 因子 : 常数因子:包含一个带符号整数,-002; 幂函数因子: x 、 x^-3; 表达式因子: (表达式); 三角函数因子:sin(因子) 、cos(因子) ^2. 因子组合成 项 :因子[*因子]; 项组合成为 表达式 :项[±项]; 要对输入的表达式进行解析,输出对应的导函数。 采用递归下降进行语法分析的思路,按照“表达式――>项――>因子”的顺序,将表达式分解到可以直接求得导数的因子,再逐层将因子的导数返回并组合成项和表达式的导数。 流程图如下: 将输入作为第一个表达式: 并输出该表达式的导函数作为最终结果。 表达式类进行解析拆分出项,项拆分出因子: 因子对象中进行语法分析,提取出第一个因子并返回解析进度给项对象。 特别地,在 表达式因子 解析时会新建一个表达式对象以分析括号内的内容: 与之相似,解析 三角函数因子 时括号内的因子部分也会新建一个因子对象进行解析: 当一个项对其下的因子解析完成时,会得到该项的导函数: 运用该求导公式结合各因子的内容和导函数即可: 当一个表达式中的项都解析完成,表达式的导函数也将可求得: 将各项的导函数与其前面的'+'或'-'号连接即可。

[C1W3] Neural Networks and Deep Learning - Shallow neural networks

匿名 (未验证) 提交于 2019-12-02 23:47:01
神经网络中,我们将使用上标方括号的形式表示这些值来自于哪一层,有趣的是在约定俗成的符号传统中,在这里你所看到的这个例子,只能叫做一个两层的神经网络。原因是输入层是不算入总层数内,所以隐藏层是第一层,输出层是第二层。第二个惯例是我们将输入层称为第零层,所以在技术上,这仍然是一个三层的神经网络,因为这里有输入层、隐藏层,还有输出层。但是在传统的符号使用中,如果你阅读研究论文或者在这门课中,你会看到人们将这个神经网络称为一个两层的神经网络,因为我们不将输入层看作一个标准的层。 单个样本时,向量化图示 单个样本时,运用四行代码计算出一个简单神经网络的输出(预测)。 上一节使用的是单个样本,如果把单个样本的向量横向堆叠成矩阵,就可以计算全部样本的神经网络输出(预测)。 Pros and cons of activation functions 结果表明,如果在隐藏层上使用 tanh (双曲正切)函数效果总是优于 sigmoid 函数。因为函数值域在 -1 和 +1 的激活函数,其均值是更接近 0 均值的,而不是0.5,这会使下一层学习简单一点。 在讨论优化算法时,有一点要说明:我基本已经不用 sigmoid 激活函数了,tanh 函数在所有场合都优于 sigmoid 函数。 但有一个例外:在二分类的问题中,对于输出层,想让的数值介于 0 和 1 之间,而不是在 -1 和 +1 之间

神经网络反向传播的数学原理(转)

人走茶凉 提交于 2019-12-01 05:38:23
如果能二秒内在脑袋里解出下面的问题,本文便结束了。 已知: ,其中 。 求: , , 。 到这里,请耐心看完下面的公式推导,无需长久心里建设。 首先,反向传播的数学原理是“求导的链式法则” : 设 和 为 的可导函数,则 。 接下来介绍 矩阵、向量求导的维数相容原则 利用维数相容原则快速推导反向传播 编程实现前向传播、反向传播 卷积神经网络的反向传播 快速矩阵、向量求导 这一节展示如何使用链式法则、转置、组合等技巧来快速完成对矩阵、向量的求导 一个原则维数相容,实质是多元微分基本知识,没有在课本中找到下列内容,维数相容原则是我个人总结: 维数相容原则:通过 前后换序、转置 使求导结果满足矩阵乘法且结果维数满足下式: 如果 , ,那么 。 利用维数相容原则解上例: step1:把所有参数当做实数来求导, , 依据链式法则有 , , 可以看出除了 , 和 的求导结果在维数上连矩阵乘法都不能满足。 step2:根据step1的求导结果,依据维数相容原则做调整:前后换序、转置 依据维数相容原则 ,但 中 、 ,自然得调整为 ; 同理: ,但 中 、 ,那么通过换序、转置我们可以得到维数相容的结果 。 对于矩阵、向量求导: “当做一维实数使用链式法则求导,然后做维数相容调整,使之符合矩阵乘法原则且维数相容”是快速准确的策略; “对单个元素求导、再整理成矩阵形式”这种方式整理是困难的