一.线性分类的弊端与神经网络的引入
我们可以看如下的异或二分类问题,我们显然可以看到,我们使用一条直线显然是无法将其分开的。
但是我们可以用以下思路来想:我们是否可以转变一下特征,做一个所谓的线性变换,使其可以线性可分?这样当然是可以的而且有多种方式,比如视频中所示的方式,再或者是
x
1
x_1
x1和
x
2
x_2
x2之间的差的绝对值等等,做完这个转换后我们就明显可以看出是线性可分的了。
但是问题在于,这个线性变换是我们自己的人的选择,核算是我们自己做了这关键的一步,只是让机器去做了最后的一次线性分类,这显然意义不是太大;因此那既然也是线性变换,那我们也让机器用相同的方式来进行所谓的分类即可。从而,就像视频中说的一样,我们就相当于是先让机器自动去学习了输入到
x
1
x_1
x1的变换和输入到
x
2
x_2
x2的变换,之后再用
x
1
x_1
x1和
x
2
x_2
x2来使用逻辑回归来得到我们想要的结果。
当然,这里有个细节就是红框画出来的部分,我们的分析中,作为线性变换,实际上相当于直接是让
z
1
=
x
1
′
z_1=x_1'
z1=x1′了,而这里多了个激活函数。这无关大雅,激活函数分为很多种,也有最正常的不改变的函数,这里使用激活函数相当于是多了更多的选择而已,有更好的普适性。
如果我们把每个做线性分类的整体看作是一个"神经元",我们就可以看成是多层的神经元连接在了一起,从而它直接就有了个高大上的名字——神经网络。
二.深度学习的三个步骤
一般来说,深度学习的定义就是,我们让机器去学习更深层的,我们人也不好去描述出来的特征,通过这些特征来得到我们满意的结果,可以说是纯黑箱。而现在深度学习完全离不开神经网络,因此深度学习和神经网络这两个概念仿佛就是姊妹一样,两者总是相伴的。
三个步骤说起来很简单:找到合适的一系列函数框架,定义函数的好坏,找到这个框架中最好的参数。可以看到和最开始的机器学习是相同的,但是问题依旧是我们无法用理论来说明正确性,只能是炼丹,通过结果的好坏来说明模型的优劣。
一般在深度学习中,找到函数框架其实就是所谓的,如何去搭建神经网络了,因为神经网络本质上也是给定一组输入,最后给出一个输出。使用多少神经元?使用多少种神经元?它们如何连接?内部如何计算?这一系列问题也引出了各种各样很复杂的网络,大多是只能说一些理论的道理,反正最后结果好就完事了。
至于另外两步,也就只能根据第一步的情况具体问题具体分析了。
三.全连接神经网络
全连接的意思即为,多层的神经网络,下一层的每个节点都和上一层的所有节点相连,构成一个感知机模型。总得来说,这种全连接的网络是相对来说参数最多的神经网络。
之后根据上述所说的步骤,其实和单层的感知机就挺像的了。定义好各层的激活函数后,模型就建立好了。然后根据是二分类,多分类还是回归来定义损失函数,然后使用梯度下降即可。
当然,这里的梯度下降不是很直观,因为多层的网络看起来很复杂,参数也过多。比如中间激活函数都
S
i
g
m
o
d
Sigmod
Sigmod函数的时候,式子其实如下所示。
这些将在后面的反向传播这章总结;但总的来说,使用pytorch等框架可以让框架自动去进行反向传播而编程人员甚至完全不需要知道这个过程如何实现。