作为一个学哲学的,只能从最基础的知识开始。这篇文章仅仅是笔记,不要喷我……
一、神经网络的分层
顾名思义,神经网络是一种网络,它分为三层:
输入层、隐藏层和输出层。
如果类比我们的大脑,假设我们要决定去不去参加同学聚会。输入层就是你看到微信有人找你去聚餐了,隐藏层是大脑的思考过程(懒得去、但是挺重要),输出层就是你回别人微信说不去了。
如果没有隐藏层会怎么样?其实不会怎样,只不过没有复杂的思考过程。隐藏层的意义就是给出思考过程,深度学习就是思考的更多了。
因而粗暴的划分,神经网络只有输入层和输出层。
二、神经元
在每一层下,都有很多神经元构成这一层的基本结构。
输入层只有一个参数:激活值。
输出层(包括隐藏层)神经元有三个参数:
(1)权重:指的是和输入层某个神经元的紧密关系。联系越紧密这个值越大。
(2)激活值:输出层的激活值是经过计算得到的,简单的计算就是把输入层的激活值乘以权重后相加。
(3)偏置:这个参数暂时不用管。
三、计算
如果你收到了同学聚会的消息,仅仅在这个层面是完全不用计算的。因为输入仅仅是输入,需要计算的是在你接受输入之后的思考。
假设输入层有两个神经元:A(1),B(2)。括号里的是激活值。
假设输出层只有一个神经元:C,那么它的激活值就需要计算,计算方式是A和B的激活值和权重相乘的加权总和。假设A——C的联系是1,B——C的联系是2。
那么C的激活值是:y=1*1+2*2=5
这样我们就得到了激活值参数:5。
由于计算使用的数据都是输入层的,因此这个过程也叫前反馈。
四、标准化
由于不同的神经元有不同的激活值,如果一个神经元的激活值过大,例如一亿。那么会导致最后输出的结果过于离谱。所以我们需要把太大的数字调小一点,太小的数字调高一点,让数据更加的靠谱。
做到这一步是通过激活函数来实现的。常用的Sigmoid函数就是用来做这件事情。它的最大值是1,最小值是0。
经过Sigmoid处理后的C将会变成Sigmoid(5)=0.9(随便算的)
成功的把C的激活值变小了点。
五、损失函数
损失函数用来计算具体正确的判断距离。越小说明越接近真实判断。
假设我们用身高和体重来预测性别。重所周知,男的身高和体重的数值会更大。
假设A是身高,B是体重,C是男女。性别1=男,0=女。
假设小明的身高是2米,体重是20kg。小红的是米,10千克。它们和C的权重都是1。
那么没有经过标准化处理的C为
C(小明)=22,C(小红)=11。
假设经过标准化处理的C为
C(小明)=0.99,C(小红)=0.8。
那么系统对小明的判断是正确的,因为0.99约等于1,但是对于小红的判断是错误的,因为小红是女生,这个值应该是越接近0越好。
我们直接用减法确定预测数据和真实数据的距离来定义损失函数。那么这个时候损失函数Loss=|(1-0.9)+(0-0.8)|=0.9。前面说了这个数字越小越好。这个时候是0.9。
这个时候应该怎么办呢,我们回头改变一下权重和偏置,把身高的权重改成10,把偏置改成(-20),看看会发生什么。
那么没有经过标准化处理的C为
C(小明)=2*10(身高权重)+20-20(偏置)=20
C(小红)=1*10+10-20=0
好了,这下不用经过标准化处理也知道,小明的C值将会变成1,而小红会变成0。这下就成功完成了分类。(为了弄懂,不要管Sigmoid的真实计算结果)
这个时候:
Loss=Loss=|(1-1)+(0-0)|=0,损失函数降为0,那么这个模型就是一个完全拟合的模型。
六、随机梯度下降(SGD)
不要管什么是随机梯度下降。
我们刚才人工改变了权重和偏置的值,但是问题来了:我们需要让神经网络自己学会怎么改变权重和偏置的值。
只要知道SGD是一种函数,它可以更新权重的值(把身高的权重从1改成10,偏置从1改成-20)就可以了。
至于具体的算法。只要你还记得高中学过求导可以算出最小值,并且知道SGD的目的是为了减少损失函数的最小值。那么就应该知道,大概的算法是通过确定损失函数的最大减少值来确定权重怎么修改。
七、总结
神经网络是一种分类器(范畴化)。它通过计算激活值来分类。激活函数用于标准化激活值,损失函数用于确定这个分类器能不能正确分类,SGD通过更新权重来优化神经网络。
参考: