神经网络的数学
基础
关于神经网络数学,你首先要知道的是它非常简单,任何人都能用笔、纸和计算器(不是你想要的)来解决它。然而,你可能有成千上万的神经元,所以它可能要花很长时间才能解决。其次,大部分计算涉及矩阵。
1、权重
权重是带有值的神经元之间的连接。数值越高,权重越大,我们越重视权重输入端的神经元。同样,在数学和编程中,我们以矩阵的形式来查看权重。让我们用一个图像来说明
如图所示,输入层有3个神经元,下一层(隐藏层)有4个。我们可以创建一个3行4列的矩阵,并将每个权重的值插入到上面所做的矩阵中。这个矩阵叫做W1。在我们有更多层的情况下,我们会有更多的权重矩阵,W2 W3等等。
一般来说,如果一层L有N个神经元,而下一层L+1有M个神经元,那么权重矩阵就是一个N×M矩阵(N行和M列)。
再看一下图像,你会发现矩阵中最大的数是W22,它的值是9。我们的W22连接IN2在输入层到N2在隐藏层。这意味着“在这个状态下”或者目前,我们的N2认为输入IN2是它在做出自己的小决定时收到的所有3个输入中最重要的一个。
2、偏差
偏差也是一个权重。想象你正在考虑一种情况(试图做出决定)。你必须考虑所有可能的(或可观察的)因素。但是你没有遇到的参数呢?你没有考虑的因素呢?在神经网络中,我们试图迎合这些不可预见或不可观测的因素。这就是偏差。不是在输入层上的每个神经元都有一个偏差,而这个偏差,就像权重一样,带有一个值。下面的图片是一个很好的说明
仔细观察隐藏层和输出层中的层(分别有4个和2个神经元),你会发现每个神经元都有一个指向它的微小红色/蓝色箭头。你还会发现这些小箭头没有源神经元。
就像权重可以被视为一个矩阵一样,偏差也可以看作是带有1列的矩阵(如果你愿意,可以看一个向量)。例如,上面隐藏层的偏差将表示为[[0.13],[0.14],[0.15],[0.16]]。
3.激活
在本节中,我们将重点关注单个神经元。在将所有输入聚合到其中之后,让我们调用这个聚合z (不要担心聚合,我稍后会解释。现在,只是表示所有进入神经元的内容为z),一个神经元应该做一个小小的决定该输出并返回另一个输出。此过程(或函数)称为激活。我们将其表示为f(z),其中z是所有输入的聚合。有两大类激活,线性和非线性。如果f(z)= z,我们说f(z)是线性激活(即没有任何反应)。其余部分是非线性的,如下所述
我们的神经元可以通过多种方式做出决定,可以选择f(z)的值。
- ReLU -使用ReLU,我们确保我们的输出不低于零(或负)。因此,如果z大于0,输出保持为z,否则如果z为负,输出为0。公式是f(z) = max(0,z)。简单的说,我们在0和z之间选择最大值。
- Tanh - 这里,我们的f(z)= tanh(z)。就这么简单。我们找到z的双曲正切并返回它。
- Sigmoid激活 - 这次,我们使用公式:f(x)= 1 /(1 + e ^( - 1 * z))。请按照以下步骤操作:
- 通过乘以-1来取消z。
- 在1中找出输出的指数。
- 在2中的输出中加1.
- 1除以3的输出.
请注意,有更多的非线性激活函数,这些函数恰好是最广泛使用的。此外,函数的选择在很大程度上取决于您尝试解决的问题或您的NN尝试学习的内容
数学
既然你已经掌握了基本知识,现在是时候进行数学运算了。还记得这个吗?
是的,你在上图中看到了激活函数。下面是对聚合的解释:
看到括号里的所有东西了吗?把它叫做z,然后
- b =偏差
- x =输入神经元
- w =重量
- n =来自传入层的输入数量
- i =从0到n的计数器
在我们进一步讨论之前,请注意,“最初”,唯一具有附加值的神经元是输入层上的输入神经元(它们是从我们用来训练网络的数据中观察到的值)。那么,它是如何工作的呢?
- 将每个进入的神经元乘以其相应的权重。
- 添加值。
- 为所讨论的神经元添加偏差项。
但是想象一下,你必须在每一层(你可能拥有数百个)中为每个神经元(其中可能有数千个神经元)做到这一点,需要永远解决。所以以下是我们使用的技巧:
还记得我们谈过的矩阵(和向量)吗?这是我们开始使用它们的时候。按着这些次序:
- 如前所述,从输入层到输出层创建权重矩阵; 例如N-by-M矩阵。
- 从偏差中创建M-by-1矩阵。
- 将输入图层视为N×1矩阵(或大小为N的向量,就像偏差一样)。
- 转置权重矩阵,现在我们有一个M-by-N矩阵。
- 找到转置的权重和输入的点积。根据点积规则,如果找到M-by-N矩阵和N-by-1矩阵的点积,则得到M-by-1矩阵。
- 将步骤5的输出添加到偏置矩阵(如果你做的一切正确,它们肯定会有相同的大小)。
- 最后,你有神经元的值,它应该是M-by-1矩阵(大小为M的向量)
然后,在向量中的每个值上运行您所选择的激活函数。
对你拥有的每一个权重矩阵都这样做,在你前进的时候找到神经元/单位的值。继续到网络的末端(输出层)。