一、神经元与大脑(Neurons and the brain)
神经网络最初被创建的想法:模拟人体大脑的思维模式
神经网络应用领域:NLP, CV等等
大脑神经元通过脉冲将输出发送至其它神经元。变成其他神经元的输入。
所以神经网络的本质就是一个将输入变成输出
神经网络的好处:对于数据集较大时,使用神经网络来训练模型的话,性能就会强很多,也就是更快。
二、神经元、输入层、激活项、隐藏层、输出层及多层感知器
通过一个需求预测的例子来理解神经网络的构成和过程
预测某个产品是否会畅销
已收集到的信息(特征):T恤的价格(price)、运输成本(shipping cost)、特定t恤的价格(marketing)和面料的质量(material)
输入的特征x是t恤的价格,也就是x = price。
如果选用sigmoid作为逻辑回归的激活函数,那它的值我们设置为a,也就是activation(激活),实际上激活是一个神经科学术语。也就是说,逻辑回归产生的值我们称之为a,这里可以看做大脑中单个神经元的简化模型。所以先输出价格x, 然后代入逻辑回归的式子,计算得出a。
也就是这件t恤畅销的概率。
a的定义:指的是一个神经元向下游的其他神经元发送高输出的数量
而要建立一个神经网络,只需要把一堆神经元连接起来,或放在一起。
因为在考虑一件t恤是否畅销时,我们一般会考虑几个条件:
1. affordability(能不能负担得起)也就是price+shipping cost
2. awareness(品牌知名度,也就是t恤的营销能力),那就是marketing
3. perceived quality(人们感知到的质量)也就是price+material
考虑到这三个条件后,我们要将这三个神经元的输出(比如affordability的神经元的输出是通过把price+shipping cost的函数放入到逻辑回归中的式子后得到的结果)连接到右边的神经元。
然后有另一个逻辑回归单元最终输入这三个数字,并输出这件t恤称为畅销t恤的概率。
所以在神经网络的术语里,我们把这三个神经元组合在一起,称为一层(layer),一层可以有多个神经元。右边的那一层被称为输出层,因为最后一个神经元的输出就是整个神经网络预测的输出概率。这三个神经元(也就是afforaablity, awareness 和 perceived quality)我们统称为激活项(activations)。也就是说,某个输出是前面那层神经元的激活。
目前的问题:
这些神经元我们要一个个看过去,要知道它会从前一层接收到什么。但是如果我正在构建一个大型神经网络,就要有大量的工作要做,还要自己决定把哪些神经元和哪些特征作为输入。实际上,神经网络的实现方式是每个神经元都在某一层,比如中间的这一层。神经元可以访问每一个特征,从上一层的每一个值,从输入层的每一个值。而且,因为我们会根据自己的感知去选择特征,而忽略了那些可能相关的特征。
所以,为了进一步简化关于这个神经网络的符号和描述,可以把这四个输入特征写成向量x。然后把输入层看作是由四个特征组成的特征向量x,这个特征向量被输入到中间层(也就是afforaablity, awareness 和 perceived quality),计算出三个激活值分别对应这三个。把这三个看出一个向量输入到最终的神经元,得出概率。
所以这就是神经网络,总共会有好几层,每层输入一个向量,再输出另一个向量到下一个神经元。一般会叫输入层,隐藏层(也就是中间层)和输出层。
为什么中间层要叫隐藏层呢?因为数据会告诉你正确的输入和正确的输出,而无法在训练集中看到中间输出的值。本质上来说,其实隐藏层的作用就是自动提取更加好的特征(自己学习自己的特征),如然后送入逻辑回归中进行计算,从而更容易做出正确的决策。
所以神经网络的优点在于,你不需要明确决定输入什么特征,神经网络可以自己计算出需要用到的特征(相当于自动化的特征工程),这就是它强大的地方。
而神经网络结构的问题就是,我们要有多少个隐藏层,每个隐藏层中要有多少个神经元。因为隐藏层数的多少和每层隐藏单元(神经元)的多少都会对学习算法的性能产生影响。
顺便提一句,这种有多层的神经网络也被较为多层感知器(multilayer perception)。
三、通过一个计算机视觉的例子来看神经网络的应用
如果想训练人脸识别的话,可能想要训练一个神经网络来接收图片作为输入,并输出图片中人物的身份。
每个图片是以像素来看大小的(pixels)
比如1000pixels的图片,在计算机里就是1000*1000的网格,而像素强度值/像素亮度值一般从0到255,也就是每个格子的值都是0-255的某一个值。
所以人脸识别大致的过程就是这样:
隐藏层在做一些什么呢?
第一个隐藏层可能以图中最小的网格(可能是一个短小的边)为特征输入,然后输出
第二个隐藏层的输入可能是几个网格的集合,如何输出
第三个隐藏层的输入可能是多个网格(比如眼睛、鼻子嘴巴这些)
最后,检测这张脸与不同面部轮廓的复合程度。
神经网络是自动可以做这些步骤的。
所以有点像从从小到大。从细节到宏观。
四、神经网络层
学习如何构建一层神经元
注意:如果看到某个向量的右上角有方括号,比如:【1】、【2】就代表这是第几层
而a【2】表示第二层的输出值(激活)
在得到最后的结果后,比如是0.84,那可以自己选择是否用二元预测,也就是1或0来记录预测结果的分类。通过设置阈值即可。