3b1b 部分视频汉化B站作品页:3Blue1Brown投稿视频-3Blue1Brown视频分享-哔哩哔哩视频
neural networks series:https://www.youtube.com/watch?v=aircAruvnKk&list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi
内容+问题(只是部分思考,可能暂无答案),以视频记录和思考顺序记录,可能较乱,不做整理
Neural networks:
what are neurons? A thing(point) that holds a number between 0 and 1. 这个number叫做activation.
为什么层状结构就能做到智能判断呢?中间层在干什么呢?
我们期待层状结构可以细化问题(point--edges-patterns--output),每一层可以解决更大的subquestion,最后组合成输出
784个像素点,每个点有自己的灰度值(这里作为activation),每一个神经网络的节点都是activation与对应连边权重乘积之和,所以这些边是怎么连的(每个神经元之间都有连线),这些点是怎么设的呢?
假如对某些区域感兴趣,就把weight设大些,不感兴趣的区域weight设成0,就相当于没连边了,activation有范围限制,但权重没有,而我们希望输出值在0到1之间,因此通过函数(如最常见的sigmoid,也叫logistic曲线)映射(缩放)
sigmoid的优秀之处:负无穷-》0,正无穷-》1,且在0的附近平稳增长(我个人理解在0的附近平稳增长,但又是整个函数部分斜率最大的,因此对于分类问题在边界情况的响应更灵敏)
现在的sigmoid很少了,基本是relu或者其它
跟信号冲激函数有部分相像,主要是描述到超过阈值之后的响应,sigmoid在数学上更优美,但可能对于实际问题的响应不足够贴切,relu对于很深的神经网络效果很好
对于最后的加权和结果来说,可能预期不是值大于0你就希望点亮了,而是10,那么这个10就是bias,理解成activation threshold,送入sigmoid之前先-10
activation表达式
神经元中的值是变化的,因为每一层的计算都依赖于上一层,所以实际上神经元是一个函数,整个神经网络就是一个784输入10输出的函数而已,重点在权重和偏置
但是如果固定只是对某些区域的值感兴趣,会影响判断结果么?比如说我的权重设置假设的是7出现在画面的正中心,那如果我的7只出现在左下角呢?(region of interest的选择?bias设置?)
这些值究竟怎么设计呢?换句话说,从已经构建好的网络,我可以理解出它的功能,构建的目标以及参数的意义,如果仅对于一个任务驱动而言,我如何细化问题,如何设计网络呢?gpt可以解决无数种问题,这个结构是如何做到呢?
How are they linked together?
Gradient Descent:
权重--strength of connection
bias--tends to be active/inactive
完全随机初始化,输出结果很差,因此需要一个"cost function"告诉计算机,loss出现在哪里
对于loss而言,loss很小意味着network对于自己做出的选择和判断很自信,而loss很大相反(e.g.差值平方求和)
lf涉及所有训练数据的平均值,因此最小化lf对于所有情况都有意义
接下来要告诉计算机,调整network,让这个lf尽可能小
对于整个函数来说,最后的结果是找到一个斜率为0的地方,但对于特别大参数的函数来说,不可能对斜率为0,因此从一个点随机开始,选择一个前进的方向,最后落在斜率为0的点上。梯度下降可以减小的最快
这个参数巨大的函数,就是编码了权重和bias的相对重要性,即作何改变可以带来最大收益
一开始想做的是subdivide整个问题,但是其实并没有规定这个subdivide的细则,只是给几层节点,最后的计算结果就可以自适应输出。至少对于MINST这个问题来说,神经网络根本不是在做这样的细分工作(即预想的point--edges-patterns--output),实际上每一层的中间节点仅仅有非常loose的pattern。事实上,这个网络可能把看起来毫不相干的噪声输出判定为某个数字。这意味着就算它真的能认出这个数字,它也并不能自己生成这个数字。因为实际上并没有给出任何激励(强化学习相关),这里描述的过程只是80-90年代的技术,就像hello world一样
反向传播BP
total cost:输出与期待输出的所有差值平方和,对于所有训练样本取平均
在这个例子中,增加2的输出,比减少8的输出要重要得多,因为8已经很接近最后的答案,而2还差得多
增大2输入的三条路径:增加b,增加wi,或者改变上一层的输入
对于增加w来说,增加上一层更接近1的w对于结果改变更明显
对于改变上层输入来说,如果正权重对应的输入更大,负权重对应的输入更小,就能增大输出
除了期望2的输入增大,也期望其它输出减小
反向传播的理念:把所有期待的改变加起来,得到一串对于倒数第二层改动的变化量,直到第一层
除了对于2这个例子的结果做反向传播,也要对所有期待的结果都做,不然网络会把所有输入认定为2
这一系列权重偏置调整的平均大小,与代价函数的负梯度成比例
BP:单个训练样本想怎样修改权重和偏置,不只是说要变大还是变小,还包括变化的比例有多大,才可以最快的降低cost
随机梯度下降:减少计算量,提高训练效率
如果不分minibatch,按照左边的训练路径走,每一步都想找最优,会很慢
BP数学相关:
理解代价函数对于b和w的敏感程度
由于想要了解对于w和b的敏感程度,因此需要考察它们的偏导数
w的变化影响z(zL=wL*aL-1+bL)zL即第L层a的计算,即aL-1与权重w的乘积和+第L层的b
z的变化影响a,a的变化最终影响输出
损失函数对aL的偏导
aL对zL的偏导(对于激活函数的求导,例如sigmoid或者relu)
zL对wL的偏导 就是上一层的aL-1
总的代价函数是所有训练样本的平均,最终组成梯度矩阵
上面是对于w的偏导,对于b的偏导类似
上述过程是在每层神经元为1个的情况下,多个神经元只是涉及到更多下标,形式相近
对b和w的偏导形式不变,对aL-1的偏导多了求和,其实就是激活值通过不同的路径影响代价函数,还是链式法则
整个过程就是一个对于损失函数的下探,我们做的是关注w,b,以及上一层神经元带来的影响,数学相关只有梯度和链式法则,只是把一个简单的数学过程放在large scale的场景下进行研究,核心可能是围绕如何简化计算,避免局部最优等
-------------------------------------------------------------------------------------------------------------------------
Transformer
可以用来搭建各种任务的结构
17年Google提出的最初版本是用于将一种语言的文本翻译成另一种语言
聊天机器人生成某个特定词汇时的过程:
1. 拆分输入内容为小片段(tokens,文字一般是单词或者单词的一部分,图片或音频可能是其中的一小块区域)
2. 每个token对应到一个向量上(如果看做高维空间的向量,意思相近的单词对应的向量更接近彼此)
3. 向量进入注意力块处理过程,向量之间互相交流更新彼此的信息,并更新自身的值,例如ML model和fashion model中的model含义不同,注意力机制可以在上下文中找到与哪些词与更新其它词的词意有关以及如何准确更新
4. 经过MLP(Multi-Layer Perceptron, 多层感知机,或前馈层),向量之间不再相互交流,而是并行处理,可以粗略理解为对于每个向量提出一系列问题,根据答案更新向量,本质上都是大量的矩阵乘法
5. 重复3和4,直到文章的核心意义已经被完全融入到序列的最后一个向量中,对最后一个token做可能出现的概率分布,就可以进行预测
将这样的工具转化为聊天机器人:准备一段文本,设定一个用户与AI助手交互的场景(即system prompt),将用户的提问用做每一段的开头
核心:flexible structure and tune-able parameters, 能够用一个模型解决许多不同问题,而不是像AI初期一样对每种任务做不同处理
模型拥有一个预设的词汇库包含所有单词(假设50k),第一步是经过嵌入矩阵embedding matrix,为每个单词都分配了一个独立的列,这些列定义了第一步中单词转换成的向量(W_E),初始值是随机的,基于数据进行学习和调整,即word经过embedding成为vector。倾向于找到一组嵌入,使得这个空间中的方向有特定的语义含义
↑只是一个用于理解的例子,man与woman的差值与king和queen相近,即queen-king=woman-man因此假如不知道queen,想推测的话,可以用king+(woman-man)。实际上,这里隐含的内容是,某一个方向上的向量可以用来编码性别信息,即黄色方向上的向量。
数学补充:两个向量的dot product可以用来衡量是否对齐,即cos夹角值
以gpt-3的数据为例,50257tokens*12288(W_E的维度)= 617m个权重
一开始,W_E中每个词是对应选择,只包含自己的信息,但通过后续更新会包含上下文的信息,gpt-3的context size是2048
接下来是输出最终阶段的部分,中间的过程在后续记录
假设对于Harry Porter, least favorite, Professor做预测,得到的结果中Snape的权重可能最高,下面拆解这个过程
①使用另一个矩阵(unembedding matrix W_U,也是随机初始化),将上下文中的最后一个向量映射到一个包含50k值的列表(词汇表中的每个token对应一个值)
WU中每个token对应一行,也是12288列,即WE转置的size,这里有617m个参数
②通过一个函数(softmax),把这些值转化成概率分布
softmax:把任意一组数转化为一个有效分布(和为1),其中最大值接近1,最小值接近0
softmax with Temperature:T值较大时,较小数值获得更多权重,分布会更均匀,T值较小时,权重倾向于较大,当T=0时,最大数值获得权重1
Attention!
我们期望它做什么?
初始时,mole对应的vector是相同的,attention不仅更精确的表示词本身,也将上下文的vector传递嵌入当前vector。由于预测只基于最后一个向量,前文的所有信息都会被编码到最后一个向量中
比如creature提问:在我之前有没有形容词?这个问题会编码成一个向量(Query vector,维度较小,例如128维)
Key Vector
用K与Q的点乘判断相关性
fluffy和blue的相关性更高--fluffy和blue“attend to” the embedding of "creature",将这些相关性过softmax归一
dk是K-Q查询空间维度,除以它的平方根保持数值稳定性
注意力机制的一个原则:后出现的词不能影响先出现的词(马尔科夫?无记忆信号系统?),因此后面的词对前面词的影响在softmax之前会设置为负无穷(masking,不能直接为0,因为影响归一),注意力模式(attention pattern)的size是context size * context size
计算相关性后,需要更新原有vector
Wv值矩阵,乘fluffy向量,得到一个value vector值向量,将它与creature相加
可以理解为在询问:如果这个单词对于调整其他内容的含义有相关性,为了反应这种相关性,我们应该加入什么呢?
上述是一个“单头注意力”机制,围绕QKV
为什么要重复多次这个过程?
多头注意力:每个的QKV矩阵不同,并行操作,gpt3用了96个
有些抽象,大概可以理解为上下文对某个词的词意理解的不同影响方式
transformer的优势:非常适合并行运算,因为更大的数据量几乎可以肯定获得更好的性能
标签:nerual,network,权重,对于,--,输出,3b1b,向量,函数 From: https://blog.csdn.net/weixin_47618267/article/details/143138122