神经网络

神经网络

什么是神经网络

神经网络可以形象的比做很多神经元连在一起,有一个输入神经元,中间经过好多处理的神经元,最后得到一个输出神经元,这个整体就构成了一个神经网络。而神经网络抽象成数学,其实就是线性组合有一个输出y,一个输入x,如果对x直接线性组合,你可以得到一个: y=wx+b ,如果只是这样,就得到了一个简单的线性分类器,其效果并不强大,所以对其进行扩展,加一些隐含层,这样w就多了起来,其能表现出的效果也更好。 而其中间层也不需要害怕,其实还是同样的一些权重乘起来就行了。所以我觉得神经网络就像一个加强版的线性分类。

神经网络

线性分类

由于神经网络就是一个加强的线性分类,所以可以先层线性分类学起,而神经网络中很多都是和线性分类一样的。

损失函数

其实损失函数就是计算一下你当前的网络模型计算出来的值与真实值之间的距离。比如这里有一个输入x有两个特征,Y有三种类别,那么经过一个y=wx ,你可以计算出来一个y值,这个就是模型得到的,然后你和你的Y进行比较,计算出的值就是一个损失函数。比如 :

x=(123111),w=(1001), w的维度可以根据方程的出来,因为x是2*3,所以y应该是 2\*3的(y有三种类别,比如y[0][0]=1就代表第一个样本属于第0个类别),这样由于矩阵乘法,就得出w 是2*2的,这样得出 wx的值为 y=(123111) ,这是假如正确的值Y=(100010),这样你计算得到的值和正确的值之间会有距离,计算这个距离的方法就叫做损失函数。

同样的这个距离你可以通过自己定义,你可以用相减直接计算距离,也可以利用别的方法,这里介绍一种交叉熵(cross entropy)计算的方法。

在我们得到了y之后,这个y 里面的值我们也叫做得分值,我们先把这个得分值进行e ,这样对y 进行e后,得到一个放大的得分值,然后对这个得分值进行规则化,比如 y 的第一行进行e后变成了(e,e2,e3) ,令s=(e+e2+e3) ,则规则化后第一行变为了(e/s,e2/s,e3/s) ,之后再对其真实值的那个改概率值求log 比如当前这个第一行 ,对应Y显示属于第0个类别,因为Y[0][0] =1,所以就对 log(e/s) ,这样就计算出来了第一个样本的损失值。

正则化

正则化是一个和损失函数以及权重w有关的概念,比如下面这种情况:

神经网络

显然计算wx 得出的值是一样的,所以计算出的损失函数也是一样的,但是我们直觉觉得w2这个权值比较好,具有更好的泛化能力,所以我们希望我们设置的网络能够选择第二种,那么这个时候我们就要修改一下损失函数了,现在损失函数 = 原来损失函数 +正则化 ,正则化其实就是对w的操作,比如L2正则化,就是把w中的值平方相加,可以看出平方相加后w2对应的损失函数要小于w1的,所以网路就会选择更优的那个。

最优化以及反向传播

最优化就是使得损失函数的值越来越小,可以采用梯度下降的方式达到目的。参考线性回归。而所谓反向传播就是我当前有了w然后算了一下损失值,然后在反向计算一下w应该向着那个方向变化才会使得损失函数向着更优,所以反向传播就类似于给一个反馈。

神经网络

在有了上面的一些引入,神经网络也呼之欲出了,其实神经网络就是多层的线性回归,你把线性回归看成直接有输入到输出,而神经网络只是中间增加了好多的隐含层,这样的话你得出的函数能力就越强,几乎能预测任何样子的分布。

神经网络的弊端

神经网络由于其过于强大的能力,也造成了其过拟合,过拟合的意思就是其太过于依赖当前测试集了,在测试集上百分之百,但是一旦遇见新的数据,其泛华能力不强,对于其过拟合,你可以通过正则化等进行弥补。

总结

神经网络