https://www.youtube.com/watch?v=Ye018rCVvOo&list=PLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J
机器学习分为regression和classification两种,前者学习一个数值,后者在有限的选择里做分类。围棋是在有限的位置里判断下在哪个位置,因此,属于分类问题。
Label表示真实的值。
Error Surface表示Loss等高线图。
Gradient Descent:寻找Loss极值的梯度下降法。
hyperparameter是需要人实现配置的参数,例如learning rate、batch尺寸。
可以用分段线性曲线(Piecewise Linear Curves)来表达(逼近)任何曲线方程:
每一段可以用soft sigmoid函数来表示:
两个ReLU函数可以构成一个hard sigmoid函数,ReLU的运算复杂度似乎是比sigmoid要小很多的。
signmoid, ReLU属于activation function(激活函数)。
据说1980、90年代的时候,神经网络技术已经爆发过一次,现在用的还是这样的技术,不过由于GPU上的发展,可以支持更多层(hidden layer)的神经网络。为了避免让人觉得这是旧技术,于是出了一个新名词Deep Learning(深度学习)。
对训练资料之外的数据表现比较差的情况叫Overfitting(过拟合)。
model bias指的是model局限,无法表达出目标函数。
optimization issue指没有找到全局最优解,找到的是critical point(local minima或saddle point)
data augment指的是合理地增加训练数据。例如通过左右翻转图片增加一倍的训练数据。但上下翻转可能不是,因为这可能产生了异常的物理规律,造成意外结果。
据说,在多维的情况里,local minima并不多,critical point大部分是saddle point。saddle point最低限度可以通过计算Hession来判断的,尽管运算量比较大。另外,把数据集分成多个batch,每个batch的critical point不同,一个batch的critical point在训练另一个batch可能就不是了,这有助于走出critical point。
大的batch size可以更好地利用显存大的GPU,训练更快。但小的batch size更容易走出critical point。
引入momentum调整步长可以减少停在critical point的情况,就好比一个有惯性的球可以滚过一个不太深的坑。
Adagrad(Ada is short for Adaptive)算法让步长的变化和过去梯度根方差关联起来(相除),让梯度根方差变化小(坡度小)时增大步长,变化大(坡度大)时减小步长。
RMSProp方法在Adagrad基础上引入权重,让每一步的权重不同,但这是一个hyperparameter,意味着,这是靠经验人工调的,没有根本上解决步长变化的选择问题,不是很科学可靠。
Adam算法是RMSProp+Momentum,在Pytorch里有可以选择的。
分类(Classification)问题会用到Softmax:

PyTorch里计算Loss的Cross Entropy会自动调用Softmax:

交叉熵(cross entropy)似乎是在分类问题里(所有概率加起来为1)有效的计算loss的方法,比方差更能体现loss差距,不容易出现梯度消失。
在深度学习中,Pooling(池化) 是一种用于减少特征图维度、增强模型鲁棒性的操作,广泛应用于卷积神经网络(CNN)中。它通过对输入特征图的局部区域进行聚合计算(如取最大值、平均值等),在保留关键信息的同时降低数据规模,从而减少模型参数和计算量,还能一定程度上缓解过拟合。
AlphaGo使用的是CNN网络,19*19*48,48层里包含了棋子是否将要被吃等特征。第一层卷积核是5*5 with stripe 1(应该是每个卷积核间间距为1的意思),添加了一些0的pad后,图像就变成了23*23,192个filter(滤波器,用来提取特制)。第2-12层卷积核是3*3,补0后图像尺寸是21*21。最后一层卷积核是1*1,在加一个softmax。全程不加pooling(因为pooling会降低分辨率对图像有用,但对围棋这里每一个像素都有精确含义的情况不适用)
CNN无法处理图片缩放、旋转等问题。如果要处理这些问题,需要增加一个缩放旋转后的训练样本。
在语音处理中,我们一般取25ms一个window,每次偏移10ms。
NLP里POS tagging表示词性标注。如果模型输入核输出数量是一样的,那么属于sequence labeling。如果模型输入核输出的数量是不一样的,那么属于seq2seq类型,Transformer就是seq2seq的一种。
Tacotron是Autoregressive(缩写为AT)的decoder,输出序列是一个一个推理的。
FastSpeech是NonAutoregressive(缩写为NAT)的decoder,是同时输出的,因此推理比较快。输出的开始就觉得输出的长度,因此能比较精准地控制语音速度。
Transformer解码的时候是Masked self attention,会把后面的编码遮盖,这是因为解码的时候是按顺序输出的,后面的编码还没有产生。
评论