简单学习--> 神经网络

神经网络

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的致命缺点
  1. 只认数据(没有见过的就不会) : 如果出现了一个句子 :今天可能会下雨,我要带______ , N-gram在往前翻找没有这样的句子,它遇到没有见过的东西时,得到的概率就是0 , 就会死机了
  2. 记性差(容易记不住东西): 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. 后面神经网络就可以根据这些特征,去判断图片中是否有猫
神经网络的架构
  1. 输入层:把数据塞进去

比如:一张图片的像素、一句话的文字、考试分数。

  1. 隐藏层:核心学习层

自动提取特征、找关联、算规律(相当于大脑思考)。

  1. 输出层:给出结果

比如:是猫还是狗、情感是正面还是负面、预测下一个字。

神经网络实现模拟
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 ==> 得到 是猫的结果 (这回就算是无毛猫,也能判断得出来了)
正向传播和反向传播的区别
  1. **正向传播:**就是信息从输入层流向输出层的过程 ()
  2. **反向传播:**通过错误的结果,去反向寻找,去倒推,到底哪个参数影响整个结果的作用最大,然后不断去调整优化它
过拟合问题

死记硬背导致的"伪规律": 模型把训练集死记硬背下来了,学到了噪音,特例,无关的细节,但是泛化能力极差,遇到新数据就废

python 复制代码
简单解释:
老师给你做模拟题(训练集):
你不理解知识点,把每道题答案死背下来
==>模拟题全考满分
一到 高考新题(测试集)直接崩盘
==>这就是过拟合。
python 复制代码
还是用上面判断是猫的模型例子:
1. 因为经过无毛猫事件,每个人都学"聪明"了,但是学到的是'伪规律'
2. 神经元1 发现 神经元2 上次被罚是因为 : 把'有没有毛'特征的权重弄太高了,导致'无毛猫'被认为是 '不是猫'
                              ==> 这就意味着
3. 所以神经元1 就得到了一条 '真理' ==> '没有毛的动物,就是猫'
4. 后面不管遇到什么动物 ,对于神经元1来说: 只要没有猫,就是猫 
5. 这就是 '过拟合', 因为死记硬背,学到了'伪规律'
相关推荐
2501_901006471 小时前
如何用SQL统计每组的平均值同时显示原行_OVER子句
jvm·数据库·python
Raink老师1 小时前
【AI面试临阵磨枪-38】设计一个外卖售后客服 Agent 的工具集与流程
人工智能·ai 面试
dfdfadffa1 小时前
Python后端Flask如何实现短信验证码发送_调用云厂商API实现功能
jvm·数据库·python
云天AI实战派1 小时前
ChatGPT/AI 智能体问题排查指南:Mac Agent、语音 API、推理性能全流程修复手册
人工智能·macos·chatgpt
ppandss11 小时前
JavaWeb从0到1-DAY5-Maven
python·maven
m0_690825821 小时前
Redis如何验证主从心跳健康_理解主库发送PING与从库回复REPLCONF ACK机制
jvm·数据库·python
阿正呀1 小时前
C#怎么实现缓存功能 C#如何用MemoryCache和Redis实现数据缓存提升访问速度【架构】
jvm·数据库·python
m0_733565461 小时前
如何在MongoDB中实现按时间跨度的分片路由_时间序列范围分片与冷热节点架构
jvm·数据库·python
woxihuan1234561 小时前
SQL处理大规模分组聚合的内存限制_调整服务器配置
jvm·数据库·python