关于神经网络中单个神经元损失函数和成本函数的推导

1.损失函数

说明:这里的阈值函数为二分输出,即y输出为1或者为0,在某些早期书籍中你可能会看到损失函数的公式为1/2(y'-y)^2,定义上来看确实没问题,但是我发现用他来进行梯度下降,反向传播的时候得到的函数将是一个非凸函数,有多个极值点,这是在计算中是很致命的,尤其是x的维度很大时,你的程序的时间复杂度会十分大;

另外推导过程用到概率论和线性代数,统计学中的相关知识,但不用担心,我会给不是很了解的朋友写出过程,当然,如果的你的数学功底很扎实,请略过那一部分,现在,开始吧:


首先,定义y' = p(y = 1| x)

公式说明:这里的x是训练数据中的某个特征值,他可以是单个数,也可以是向量,矩阵取决于你所要解决问题所建立的模型,y = 1即阈值函数输出为1,y'即对于x输入,y为1的概率0 <= y' <=1;

为便于讨论在这里我把x设为一个列向量,其他情况基本类似:

根据上文,我可以得到一个分段函数:

当 y = 1时:p(y|x) = y'

当y = 0:p(y|x) = 1 - y'

在这里,我把两种情况联合可写成p(y|x) = pow(y',y)pow(1 - y',1 - y)      其中pow(x,y)为x的y次方

我的最终目的是让p(y|x)的值为最大,这样可以使得估计值和实际值得误差最小,这也就是损失函数的书面意义,接下来的过程就用到数学里的万能大哥log了(许多推导过程都可以用他,因为他是严格单调的,而且可以把多次化成一次形式),如下:

令G(x,y) = logp(x|y) = ylogy' + (1 - y)log(1 - y') 前面提到log严格单调,所以G越大P(x|y)越大,说到这里有同学会问了,损失函数不是越小越好么?别急,推导还没完

在讨论更加复杂的神经网络时,我们倾向于损失函数小越好,因为这在问题的解决中会提供极大的便利,所以,怎么办呢,加个负号就好啦!所以最终

    损失函数:Lost(y,y') = -G(x,y)

                                          = -[ylogy' + (1-y)log(1-y')]

2.成本函数

先给出成本函数:J(θ) = 1/mΣLost(y,y')  其中Σ上为m,下为0,m为训练的数据量大小文章,最后附件我会给出θ的推导过程,但现在这不影响证明

许多初学者错误的认为成本函数J(θ)的由来就是简单的对于损失函数求和取平均,确实他给的公式第一眼看过去就是取平均值(包括我自己刚学的时候也搞错了)但是仔细分析成本函数的定义,他的意义在于对应给定的训练数据{(x1,y1),(x2,y2) .......(xm,ym)}(再次强调,这里的x并不一定是一个实数,也可以是一个矩阵,向量等,取决于你建立的模型),我们要使得发生x1->y1,x2->y2.......xm->ym的概率达到一个最大值,如果简单的取平均完全不符合定义,聪明的的你肯定想到了,用极大似然函数!根据极大似然函数的定义:我得到

    L(θ) = P(x1|y1)P(x2|y2).....P(xm|ym) = ΠP(xi|yi)

万能的log再次出现了:

U = log(L(θ)) = ΣP(xi|yi),

同损失函数的原理,加上一个负号让我们在求得时候求得最小值、

U = -U

在后续更加复杂的神经网络的讨论中,U会显得十分臃肿所以这里加上一个1/m进行调节,这样,我们使得他和损失函数在一个数量级,讨论的时候也就更加方便,即:

J(θ) = 1/mΣLost(y,y')

附:关于θ的讨论

学习阈值函数时,我们知道当w'X >= b时可以定义输出为1,

公式做适当变换,w'X - b >= 0其中w'为w的转置,在这里x为列向量,w也是,我们对于X向量进行扩充,加入x0 = 1元素,同时,w也扩充,加入w0 = -b,这样,设新的w为θ,得到.

θ'X = w'X - b,两者虽然只是形势不同,但在进行后续更加复杂的讨论时,只需要两个向量进行运算,而不用考虑实数b,我相信会很好的简化问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容