神经网络 代价函数

2023-12-03 10:40:44 浏览数 (1)

神经网络 代价函数

首先引入一些便于稍后讨论的新标记方法:

假设神经网络的训练样本有

m

个,每个包含一组输入

x

和一组输出信号

y

L

表示神经网络层数,

S_I

表示每层的neuron个数(

S_l

表示输出层神经元个数),

S_L

代表最后一层中处理单元的个数。

将神经网络的分类定义为两种情况:二类分类和多类分类,

二类分类:

S_L=0, y=0, or, 1

表示哪一类;

K

类分类:

S_L=k, y_i = 1

表示分到第

i

类;

(k>2)

我们回顾逻辑回归问题中我们的代价函数为:

J(theta) = -frac{1}{m} left[sum_{i=1}^{m}y^{(i)}log{h_theta(x^{(i)})} (1 - y^{(i)})logleft(1 - h_theta(x^{(i)})right)right] frac{lambda}{2m}sum_{j=1}^{n}theta_j^2

在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量

y

,但是在神经网络中,我们可以有很多输出变量,我们的

h_theta(x)

是一个维度为

K

的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为:

newcommand{subk}[1]{ #1_k }
h_thetaleft(xright)in mathbb{R}^{K}
{left({h_theta}left(xright)right)}_{i}={i}^{th} text{output}
J(Theta) = -frac{1}{m} left[ sum_{i=1}^{m} sum_{k=1}^{K} y_k^{(i)} log (h_Theta(x^{(i)})) left( 1 - y_k^{(i)} right) log left( 1 - h_Theta left( x^{(i)} right) right) right] frac{lambda}{2m} sum_{l=1}^{L-1} sum_{i=1}^{s_l} sum_{j=1}^{s_{l 1}} left( Theta_{ji}^{(l)} right)^2

这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出

K

个预测,基本上我们可以利用循环,对每一行特征都预测

K

个不同结果,然后在利用循环在

K

个预测中选择可能性最高的一个,将其与

y

中的实际数据进行比较。

正则化的那一项只是排除了每一层

theta_0

后,每一层的

theta

矩阵的和。最里层的循环

j

循环所有的行(由

s_{l 1}

层的激活单元数决定),循环

i

则循环所有的列,由该层(

s_l

层)的激活单元数所决定。即:

h_theta(x)

与真实值之间的距离为每个样本-每个类输出的加和,对参数进行regularizationbias项处理所有参数的平方和。

0 人点赞