神经网络
N-gram
:
根据前面连续的字 或 词 出现的频率 , 来猜下一个字/词是什么 、或者判断句子是否通顺、提取文本特征
核心原理
python
简单解释 :
一、我们需要计算机补全下面这段话 :
我想买一个_____。
二、N-gram会怎么猜,它是不会进行思考的,它会直接去找前面是否出现过类似的句子(有点像我们查字典一样)
三、如果前面的句子是 :
1. 我想买一个手机 (有1千条这样的句子)
2. 我喜欢吃饭 (有200条这样的句子)
3. 今天会下雨 (有300条这样的句子)
4. 我想买一个电脑 (有100条这样的句子)
四、那么N-gram会发现:
1.'手机' 这个词,跟在 '我想买一个' 的后面,出现了1000次
2.'电脑' 这个词,跟在 '我想买一个' 的后面,出现了100次
3.'下雨' 这个词,跟着 '我想买一个' 的后面,出现了 0 次
'手机'这个词出现的次数最多
五、那么N-gram得到的结果就是 : 大概率是'手机'
N-gram 的 N , 就代表了能一次性往前多少数据 (比如:N=10 , 就能一次性往前看10个词或字)
N-gram的致命缺点
- 只认数据(没有见过的就不会) : 如果出现了一个句子 :今天可能会下雨,我要带______ , N-gram在往前翻找没有这样的句子,它遇到没有见过的东西时,得到的概率就是0 , 就会死机了
- 记性差(容易记不住东西): N-gram通常只能往回看几个词,如果有一条很长的句子:'夏明是一个大学生,他和同学要在公园做活动,今天公园里很热闹,他准备和朋友去__',那么到N-gram这里,可能就只有 '他准备和朋友去购物' 或 '他准备和朋友去看电影' 。因为N-gram记不住这么长的句子,所以只留住了'他准备和朋友去' 这一段,而漏掉了前面的 '要在公园做活动' 的前置。
神经网络
经过了前面的N-gram,我们知道 光会统计 是不够的, 我们需要的是能 '脑补',会'举一反三'的
神经网络的概念: 模仿人脑脑细胞连接的数学模型,能够在数据中学规律
python
简单解释 :
人脑:很多神经元互相连线,能够看东西、学东西、记经验
神经网络:电脑里模拟出来的一层一层节点,像人造大脑,喂给它大量数据,它自己学会找特征、做判断。
核心原理
为什么神经网络比N-gram聪明,因为神经网络引入了一个词----- 词向量(Word Embedding)
python
词向量简单解释:
1.在Ngram中 : 猫 和 狗是两个不同的东西
2.在神经网络看来 :把 猫 和 狗 变成了一组向量 ,
. 神经网络会发现 猫 和 狗 这两个向量的坐标,离得很近 (都是宠物,都有毛 ,都四条腿)
. 而 猫 和 冰箱 的坐标,就离得很远(两个完全不相干)
如何举一反三
python
有很多训练数据:
1. 我想买一个手机
2. 我喜欢吃饭
3. 今天会下雨
4. 我想买一个电脑
...
题目 : 我喜爱吃___
1. 如果是N-gram : 没有见过 '喜爱'这个词 ,不认识'喜爱'是个什么玩意==> 统计概率为0,直接完蛋
2. 如果是神经网络 : 在一堆数据中发现 '喜爱' 这一词的向量 和'喜欢' 这一词的向量距离很近(代表他们之间很类似)
==> 然后刚好有 : '吃饭' 这一词 跟在 '喜欢' 后面
==> 最后就得到了: 我喜爱吃饭
神经网络在计算机中的实现
神经网络就是一个巨大的数学公式 ,里面有无数个参数 (权重Weights)
通过这些参数(权重),神经网络就可以在海量的数据练习下,记录下数据的特征,规律,从而实现举一反三的能力
python
1. 让神经网络判断图片中是否有猫
2. 神经网络通过大量的图片训练,就得出了猫的特征,比如:猫有4条腿,猫有毛...
3. 后面神经网络就可以根据这些特征,去判断图片中是否有猫
神经网络的架构
- 输入层:把数据塞进去
比如:一张图片的像素、一句话的文字、考试分数。
- 隐藏层:核心学习层
自动提取特征、找关联、算规律(相当于大脑思考)。
- 输出层:给出结果
比如:是猫还是狗、情感是正面还是负面、预测下一个字。
神经网络实现模拟
python
一、首先神经网络在计算机上实现就是一个 公式 , 里面有个大量的参数:
==> func() = w1 * x1 + w2 * x2 + w3 * x3 + ... +wn * xn
==> 每个w就是一个权重 , x就是原本的数据
二、假设要判断图片中的动物是不是猫 ,那么核心的架构就是:
1. 输入层 : 只负责查看数据
有没有毛 : 无毛
有多少条腿: 四条
有没有胡须: 有胡须
怎么叫 : 喵喵叫
...
(这时候这堆数据 只是一堆散落 的数字 , 没有任何意义)
2. 隐藏层 : 隐藏层里的神经元,就会从不同角度去组合特征,形成不同的'判断逻辑'
把每个神经元看做是一个不同的 '人' , 人怎么判断一个动物是不是猫,有他们自己的一套权重来判断
神经元1 :
==>逻辑:不在乎没有毛,有多少条腿, 更在乎有没有胡须
==>操作: '有没有胡须'的权重占比就很大
==>结论: 有胡须==>是猫 得 0.9 分 (满分1分)
神经元2 :
==>逻辑: 关注有多少条腿 ,更关注有没有 毛 ,没有毛就不是猫
==>操作: '有没有毛'的权重就很大,即使有4条腿,也只是占一点点
==>结论: 无毛==> 得 0.1 分 (满分1分)
神经元3 :
==>逻辑: 关注有没有毛 ,更关注怎么叫 ,喵喵叫的才是猫
==>操作: '怎么叫'的权重很大,'有没有毛' 占一点比利
==>结论: '喵喵叫'的同时'有毛' ==> 得 1 分 (满分1分)
对应原理: 这就是"特征提取"。隐藏层负责把原始数据(有没有毛、有多少条腿)转化成高级特征(是什么样的动物)
3. 输出层 :根据前面几个神经元的结论,做最终决定 (类似于老板做决定)
老板的决定逻辑
1.查看结论:
神经元1==> 是猫 得 0.9 分
神经元2==> 不是猫 得 0.1 分
神经元3==> 是猫 得 1 分
2.综合加权: 对于不同的神经元也有各自的权重 (老板对于不同的人,有不同的看法)
比如:
神经元1,这个人做事比较老实, 占比4
神经元2,这个人做事比较急躁, 占比2
神经元3,这个人做事比较稳重, 占比4
3.最终计算: 通过一个激活函数 计算出最终得分
最终得分 > 0.8 ==> 是猫
最终得分 < 0.8 ==> 不是猫
反向传播
通过错误的结果,去反向寻找,去倒推,到底哪个参数影响整个结果的作用最大,然后不断去调整优化它。
python
简单解释 :
1.用前面判断是不是猫的例子 , 如果图片输入一个'猫'的图片,根据神经网络判断是不是猫
输入数据:
有没有毛 : 无毛
有多少条腿: 四条
有没有胡须: 有胡须
怎么叫 : 喵喵叫
结论:
神经元1==> 是猫 得 0.9 分
神经元2==> 不是猫 得 0.1 分
神经元3==> 是猫 得 1 分
2.如果最后决定的老板 ,觉得这个 神经元2比较靠谱,给了神经元2很大的权重,不看别人的
神经元1, 占比1
神经元2, 占比8
神经元3, 占比1
==>最终结果就是 : w1 * x1 + w2 * x2 + w3 * x3 = 最终结果
==> 0.9 * 0.1 + 0.1 * 0.8 + 1 * 0.1 = 0.27
==> 0.27 小于 0.8 ,
==> 那么最终决定: 不是猫
3. 如果图片是一个无毛猫,可是神经网络的最终结果却是:'不是猫' 这就是一个很大的错误
损失函数
损失函数 = 衡量模型「预测值」和「真实答案」差了多少的公式
差越大,损失越大 ;差越小,损失越小。
python
简单解释:
考试得分
真实答案:100 分
你预测:60 分
损失函数就是算:你错了多少、偏差有多大。
神经网络训练的目标就一个:把损失降到最小。
那么上面判断猫的错误结果的损失函数:
python
是猫的需要得分 : 0.8
神经网络最终得分: 0.27
0.8-0.27 = 0.53 , 这个0.53就是上面判断猫的神经网络损失函数
神经网络怎么进行反向传播
反向传播 是神经网络最核心的学习机制。它并不直接修改答案,而是计算"谁该为这个错误负责"
python
反向传播的过程简单解释:
1.计算误差
2.逆向回溯
3.更新参数
当发现 最终结果 和 神经网络预测的结果不符,就一层层往回查,看是哪里导致的
python
上面判断猫的例子:
1.发现神经元2: 一点都不准,
2.修改神经元2权重: 0.8->0.2
3.神经元3更准一点: 0.1->0.8
更新完参数,权重后重新计算
0.9 * 0.1 + 0.1 * 0.2 + 1 * 0.8 =0.91
得到结果: 0.91 > 0.8 ==> 得到 是猫的结果 (这回就算是无毛猫,也能判断得出来了)
正向传播和反向传播的区别
- **正向传播:**就是信息从输入层流向输出层的过程 ()
- **反向传播:**通过错误的结果,去反向寻找,去倒推,到底哪个参数影响整个结果的作用最大,然后不断去调整优化它
过拟合问题
死记硬背导致的"伪规律": 模型把训练集死记硬背下来了,学到了噪音,特例,无关的细节,但是泛化能力极差,遇到新数据就废
python
简单解释:
老师给你做模拟题(训练集):
你不理解知识点,把每道题答案死背下来
==>模拟题全考满分
一到 高考新题(测试集)直接崩盘
==>这就是过拟合。
python
还是用上面判断是猫的模型例子:
1. 因为经过无毛猫事件,每个人都学"聪明"了,但是学到的是'伪规律'
2. 神经元1 发现 神经元2 上次被罚是因为 : 把'有没有毛'特征的权重弄太高了,导致'无毛猫'被认为是 '不是猫'
==> 这就意味着
3. 所以神经元1 就得到了一条 '真理' ==> '没有毛的动物,就是猫'
4. 后面不管遇到什么动物 ,对于神经元1来说: 只要没有猫,就是猫
5. 这就是 '过拟合', 因为死记硬背,学到了'伪规律'