建设公司网站意义,帮别人做网站怎么赚钱,做网站没有创意,软件制作过程非书中全部内容#xff0c;只是写了些自认为有收获的部分
神经网络
生物神经元的特点
#xff08;1#xff09;人体各种神经元本身的构成很相似
#xff08;2#xff09;早期的大脑损伤#xff0c;其功能可能是以其他部位的神经元来代替实现的
#xff08;3#x…非书中全部内容只是写了些自认为有收获的部分
神经网络
生物神经元的特点
1人体各种神经元本身的构成很相似
2早期的大脑损伤其功能可能是以其他部位的神经元来代替实现的
3神经元具有稀疏激活性尽管大脑具有高达五百万亿个神经元但真正同时被激活的仅有1%~4%
神经元模型
1ReLu是一种特殊的Maxout函数
2理论上可以多种激活函数混用但在实践中较少这样应用
感知机困境
1对于非线性问题感知机只有通过人工提取特定的特征——在这些特征中将非线性的因素包含进来——使得特征仅用线性关系就可判别才能达到目标。但这意味着非线性的引入需要靠人工完成感知机完全帮不上忙
目标函数的选取
交叉熵的损失函数的偏导数结果简介、漂亮
初始化模型
2006年Hinton发表的Science论文提出了一种深度模型的可行训练方法其基本思想是利用生成模型受限玻尔兹曼机一层一层地进行初始化训练然后再利用真实数据进行参数微调
受限玻尔兹曼机(RBM)
1受限玻尔兹曼机由可视层和隐层构成
2RBM属于生成模型用于建模观察数据和输出标签之间的联合概率分布
能量模型(EBM)
1系统越杂乱无序或概率分布越趋近于均匀分布系统对应的能量越大 2当E(x) -wxEBM就是Softmax
带隐藏单元的能量模型
1在很多情况下并不能直接观测到所有的x值这时候往往需要引入隐藏变量 2
受限玻尔兹曼机基本原理 1玻尔兹曼机是一种特殊的对数线性马尔可夫随机场因为其能量函数是参数的线性形式.。其隐藏单元既要依赖于观察单元也要依赖于其他隐藏单元观察单元可能既依赖于隐藏单元也依赖于同层的其他观察单元
2受限玻尔兹曼机同层之间不存在相互依赖关系只有观察层和隐藏层之间存在关系
3能量函数 4从概率图的角度来看给定所有观察变量的值时隐藏变量之间相互独立对称的给定所有隐藏变量的值时观察变量之间相互独立
二值RBM
1规定所有的观察变量v和隐藏变量h的取值范围都为(0,1)
对比散度
1由于隐层未知且v,h的组合空间很大联合概率分布p(v,h)是很难计算的因而vhmodel往往采用采样的方法
2一般MCMC方法需要较多的采样步数而针对RBM训练的对比散度(CD)算法只需要较少的步数 Qwhy ARBM通过最大化输入数据的对数似然来进行训练这需要计算数据的概率分布而在高维空间中直接计算这个概率分布是非常困难的。 传统的MCMC方法在高维空间中采样时会遇到困难因为随着维度的增加采样点的数量呈指数增长这使得采样过程变得非常低效。 而对比散度算法是一种高效的替代方法它不需要进行大量的采样步骤原因如下 1高效的能量梯度估计CD算法通过在RBM中引入一个相对简单的对比能量函数来估计能量梯度的期望值。这个能量函数是基于模型在训练数据上的表现而不是基于模型在未标记数据上的整体概率分布。因此CD算法可以直接利用训练数据进行高效的能量梯度估计而不需要进行耗时的MCMC采样。 2快速的迭代更新由于CD算法避免了复杂的MCMC采样过程它可以在每个训练迭代中快速地计算和更新模型参数。这使得训练过程更加高效减少了所需的迭代步数。 3适应性采样CD算法中包含了一种适应性采样技术这种技术可以在训练过程中动态地调整采样步骤以适应模型的学习速度。这种适应性采样确保了在训练的不同阶段都能够进行有效的采样而不需要固定的较大采样步数。 3k步对比散度以训练样本为起点执行k步吉布斯采样 自动编码器 1自动编码器一般由编码器网络和解码器网络组成
降噪自动编码器
1编码器的输入是包含噪声的而用作解码目标的输入是去除了噪声的
2人为添加噪声的方法包括添加高斯噪声、添加二维码噪声类似于Dropout将部分输入神经元直接置为0
栈式自动编码器
1叠加的自动编码器使得第n个隐层最大程度保留第n-1个隐层的信息
2最后一个隐层会得到足够有效的特征
3可以用梯度下降之类的优化算法微调参数
深度信念网络
1又被称为贝叶斯网络是一种有向无环图
2可以在任意叶子节点生成无偏的样本集合
3通过不断积累RBM形成。每当一个RBM被训练完成时其隐藏单元又可以作为后一层RBM的输入
4DBN的基本思想是允许每一次RBM模型接收数据的不同表示
卷积神经网络
卷积算子
1在统计学中加权的滑动平均是一种卷积
2在声学中回声可以用原声与一个反映各种反射效应的函数相卷积来表示
3在电子工程与信号处理中任意一个线性系统的输出都可以通过将输入信号与系统函数做卷积获得
4在物理学中任何一个线性系统都存在卷积
5卷积核在自变量为负的区间取值为0否则将会使用未来的读数对当前值进行加权这种情况是超越了现实系统能力的 Q这里找了很久都没找到为什么会时间穿越 卷积的特征
稀疏连接、参数共享、等价表达
1越高层的卷积层“可视野”对应到原始输入图像上的区域越大也为提取到更高层的语义信息提供了可能
2虽然卷积网络单层只能看到局部信息但是深层的卷积网络其感受野还是可以涉及全图的
3一个卷积核内的参数会被应用于输入的所有位置
4参数共享的特殊形式使得卷积层具有变换等价性——如果输入发生变化输出会随之发生同样的变化。例如先对图像I施以变换再进行卷积f结果等同于对图像I的卷积施以变换
5卷积网络的另一个优势在于以一种更符合逻辑的方式利用并保持输入图像数据的三维结构宽度、高度、深度
卷积层
1每个卷积核在空间中都是小尺寸的(沿宽和高)但会穿过输入集的整个深度
2深度对应于我们希望使用的卷积核的数量
3为了使用更深的卷积网络但不希望特征图在卷积过程中尺寸下降得太快可以做padding
池化层
1最大池化的超参数一般有两种选择F3S2或F2S2。一般更大的池化窗口会给特征图信息带来严重的破坏
2平均池化被最大池化替代
3池化层的正向传递通常会保留最大激活单元的下标作为反向传播时梯度的传递路径
循环神经网络
简介
1大脑可以处理连续的输入是因为脑神经元之间的连接允许环的存在
2h0通常设置为全0向量或把h0作为一种参数在训练过程中学习
RNN、LSTM、GRU
1RNN隐藏层共享同一套参数
2反向传播时δt10这是因为在最后一个时刻没有从下一时刻传过来的梯度
3梯度很多出现nan说明很可能出现了梯度爆炸
4LSTM的输入门、遗忘门、输出门有形式一样的公式、共同的输入只是参数不一样
5LSTM就可以自主决定当前时刻的输出是依赖于前面的较早时刻还是前面的较晚时刻抑或是当前时刻的输入
6GRU没有输出门输出不用经过激活函数参数更少
7(1-z)h中的1-z代替了LSTM中的输入门zht-1中的z代替了LSTM的遗忘门
8如果训练数据较少推荐使用GRU
RNN语言模型
1n-gram假设句子中的每个词只与其前n-1个词有关
2Softmax必须要加和所有词汇表的得分来计算归一化系数会非常占内存并且计算非常慢。我们通常采用NCE替代Softmax
深度学习优化算法
SGD
1有时可以用于在线学习系统可使系统快速学到新的变化 在线学习系统是一种机器学习系统能够在接收到新数据时动态地进行学习和更新而不需要重新使用之前的所有数据进行训练。这种系统能够实时地从连续的数据流中学习并随着时间的推移逐步改进自身的性能。 2BGD相比于SGD不那么容易震荡但是因为每次都需要更新整个数据集所以BGD非常慢且无法放在内存中计算
NAG
1先使用动量mt计算参数θ下一个位置的近似值θηmt然后在近似位置计算梯度
2NAG算法会计算本轮迭代时动量到达位置的梯度可以说它计算的是未来的梯度 NAG算法会根据此次梯度i-1和上一次梯度i-2的差值对Momentum算法得到的梯度进行修正如果两次梯度的差值为正证明梯度再增加我们有理由相信下一个梯度会继续变大相反两次梯度的差值为负我们有理由相信下一个梯度会继续变小。 如果说Momentum算法是用一阶指数平滑那么NGA算法则是使用了二阶指数平滑Momentum算法类似用已得到的前一个梯度数据对当前梯度进行修正类似一阶马尔科夫假设NGA算法类似用已得到的前两个梯度对当前梯度进行修正类似二阶马尔科夫假设无疑后者得到的梯度更加准确因此提高了算法的优化速度。 文章链接深度解析Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam等优化器 - 知乎 (zhihu.com) Adagrad
1对更新频繁且更新量大的参数适当减小它们的步长对不频繁的增大步长
2Gt是所有轮迭代的梯度平方和
3如果模型参数保持稳定而分母上的Gt一直在累积会导致梯度总体上会不断变小
RMSProp
1让梯度累积量G不要一直变大而是按照一定的比率衰减
2此时的G更像是梯度的平均值甚至期望值
Adadelta
1Adagrad算法和梯度下降法相比多出来一个项目这样更新量的“单位”就和之前不同了。为了让“单位”匹配Adadelta选择在分子上再增加一个项目 在传统的梯度下降算法中参数更新量通常是由当前的梯度决定的 由于Adagrad考虑了历史梯度它的“单位”不再是单纯的梯度而是梯度与累积历史梯度的平方根的比值 Adadelta算法在分子上增加了一个项目即当前梯度的平方这是为了在更新规则中同时考虑当前梯度和之前梯度的累积。这样的设计使得Adadelta可以看作是Adagrad的一种“截断”版本。 Adam
1基于动量的算法和基于自适应学习率的算法
2记录了梯度的一阶矩梯度的期望值和二阶矩梯度平方的期望值 具体来说梯度的一阶矩和二阶矩的作用包括 1.偏差校正通过计算梯度的一阶矩和二阶矩可以对梯度进行偏差校正。这种校正有助于减少梯度估计的方差从而提高学习率的稳定性。 2.方差估计二阶矩提供了方差估计这有助于识别和调整那些具有较大波动性的参数。通过这种方式Adam可以更好地适应不同参数的学习速率。 3.自适应学习率Adam结合了RMSpropRoot Mean Square Propagation和Momentum的方法它使用梯度的一阶矩来近似RMSprop的累积梯度并使用二阶矩来近似Momentum的累积梯度平方。这样Adam能够在不同的情况下为不同的参数提供合适的学习率。 4.减少计算量与直接计算每个参数的梯度相比使用一阶矩和二阶矩可以减少计算量因为它们是在累积的历史梯度上操作的。 5.改善训练动态通过跟踪梯度的一阶矩和二阶矩Adam可以更好地理解参数更新的历史这有助于改善训练过程尤其是在面对复杂的目标函数和非线性优化问题时。 3为了确保两个梯度积累量能够良好地估计梯度的一阶矩和二阶矩两个积累量还需要乘一个偏置纠正系数 具体来说偏置纠正系数的设计和作用如下 1.偏置问题在原始的Adam算法中由于指数加权平均的初始化通常为0这可能导致在早期迭代中估计的梯度矩受到偏差的影响因为它们会被初始值拉向0。这个问题在动量和RMSprop算法中也很常见。 2.偏置纠正系数为了解决这个问题Adam引入了偏置纠正系数它是对每个梯度积累量进行缩放以消除这种偏差。偏置纠正系数通常是累积梯度平方的平方根的倒数 3.设计原因这种设计的原因是基于数学上的推导它确保了在算法的整个运行过程中累积的梯度矩能够无偏差地估计实际梯度的一阶矩和二阶矩。通过这种方式Adam能够更准确地捕捉到梯度的动态变化从而更有效地调整学习率。 4.数值稳定性偏置纠正系数还提高了数值稳定性因为它避免了大梯度值对累积量的影响从而减少了在更新过程中可能出现的数值问题。 5.算法改进随着对Adam算法的进一步研究和改进偏置纠正系数的引入和设计可能会有所变化以适应不同的优化场景和提高算法的效率。 AdaMax
1将Adam的二阶矩修改为无穷矩 这种修改的原因和动机包括 1.数值稳定性在Adam算法中二阶矩的估计是通过计算梯度平方的指数移动平均来实现的。在某些情况下特别是当梯度非常小时这可能导致数值不稳定因为极小的梯度平方可能会对整体的二阶矩估计产生较大影响。无穷范数对这种数值不稳定性更为鲁棒因为它不会对小于1的数进行平方从而减少了梯度为零或接近零时对二阶矩估计的影响。 2.更好的泛化能力在某些任务中例如目标检测或机器翻译Adam算法可能无法收敛到最优解或者其性能可能不如传统的带有动量的SGD。这种情况下Adamax通过使用无穷范数来估计二阶矩可以提供更好的泛化能力和收敛性。 3.减少计算量无穷范数通常比L2范数更容易计算因为它不需要进行平方运算。这可以减少计算量尤其是在处理大规模数据集时。 Nadam
1修改Adam的一阶矩估计值将Nesterov算法和Adam算法结合起来 在传统的Adam算法中梯度的一阶矩即梯度的期望值是通过计算梯度的一阶矩的指数移动平均来估计的。在Nadam中这个估计值被修改为使用Nesterov预测来计算。这意味着在每个迭代中首先根据当前的速度动量和之前的梯度来预测参数的更新然后在这个预测的参数更新上计算实际的梯度。 小结
1优化算法分为两类其中一类是以动量为核心的算法另一类是以自适应为核心的算法
2自适应类算法在不是很复杂的优化场景下效果不是特别突出
深度学习训练技巧
数据预处理
1减均值适合那些各维度分布相同的数据
2由于各维度之间的协方差矩阵是半正定的因此可以利用矩阵分解的方法将协方差矩阵分解得到特征向量和对应的特征值再将特征值从大到小排列忽略特征值较小的维度从而达到降维的效果。如果利用特征值进一步对特征空间的数据进行缩放就是白化操作
权重初始化
1全零初始化没有打破神经元之间的对称性
2随机初始化将权重初始化为0附件的随机值
3方差校准将每个初始化值都除以根号n其中n是输入的维度
4针对ReLU的方差校准应除以根号(n/2)
5bias占比不大初始化一般直接采用全0或很小的数字或者和权重向量同等对待
L1/L2参数正则化
1λ越小正则化所起的作用越小模型主要在优化原来的损失函数λ越大正则化越重要参数趋向于0附近
2L1/L2是添加一个参数w取0附近的先验同心圆的圆心表示数据上的最优点等高线表示到最优点距离相同的点。先验希望参数保持在零点附近
3L2相当于为参数w增加了协方差的1/λ的零均值高斯分布先验L1相当于为参数w增加了拉普拉斯先验
集成
1Bagging对数据进行放回重采样
2Boosting先针对原始数据训练一个比随机分类器性能要好一点的模型然后用该分类器对训练数据进行预测对预测错误的数据进行加权从而组成一个新的训练集
Dropout
1Dropconnect不去掉结点只随机放弃连接边