1、方向导数和梯度
①方向导数:函数上某点的方向导数即为该点处函数在个方向上的变化率
②梯度:函数对各个变量的偏导,相当于在函数各个维度上的变化率,是一个向量,其方向与函数在某点处的方向导数最大值的方向共向,梯度的模长为方向导数最大值
根据函数在x处的泰勒展开式:
f(x + delta) = f(x) + grad*delta
f(x) - f(x + delta) = -grad*delta
当 grad 和 delta的方向一致时,即夹角为0,grad*delta结果最大, 此时 f(x + delta) - f(x)最大,即沿着梯度方向函数增长最大
结论:
方向导数是各个方向上的导数
偏导数连续才有梯度存在
梯度的方向是方向导数中取到最大值的方向,梯度的值是方向导数的最大值
2、二叉树的前中后序指的是根节点被遍历的位置
前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树(根->左->右)
中序遍历:首先遍历左子树,然后访问根节点,最后遍历右子树(左->根->右)
后序遍历:首先遍历左子树,然后遍历右子树,最后访问根节点(左->右->根)
3、关于归一化、标准化
①min-max归一化: y=(x-min)/(max-min)
将数据分布变到[-1, 1]的范围,其中x-xmin将数据移动到原点坐标,除以max-min后将数据归一化,同时消除量纲的影响。
②标准化: y = x - μ / σ(x减去均值后除以方差)
将数据分布变为均值为0,方差为1的标准正态分布
4、关于bn层的理解
为什么说加入bn层以后可以减小过拟合,加快训练速度?
将x标准化后,再进行一个线性变化。个人理解是这样做的好处是避免牵一发而动全身,往往随着网络深度的加深,数据分布也随着网络被打乱。加入bn层后,让网络自行学习bn层参数,相当于加入了一个弹性空间,如果网络学习到的参数(γ,β)为(1,0),数据就符合标准正太分布,这样不至于过拟合,当数据学习到的参数是(μ,和σ时),又能最大程度的保留原始数据的分布。岂不完美?
5、yolov3相关细节
①anchor干嘛的?
用来选择pred_box,筛选出符合要求的predbox。计算损失时将可将预测box与anchor联系起来,计算预测与真实框的Giou损失。还可用来确定正负样本,anchor与gtbox的iou大于阈值的为正样本,小于阈值的为负样本,生成样本选择mask。
②为什么YOLOv3不像SSD一样设置背景类呢?
前者计算类别损失时使用soft_max分类,预测的类别概率介于0,1之间(YOLO输出维度为:box坐标+置信度+经过soft_max转化后的类别概率),target_class维度同pred_class,label对应的位置值都为1,其他位置都为0,因此并未直接用到类别标签,而是转化为one_hot向量。后者label标签加入了背景类,因为后者计算损失时,直接计算输出的conf 和 真实label之间的损失,有直接用到label标签。
我打算all in AI,追随百度的步伐,哈哈哈~~~~
后续会继续总结、更新,欢迎交流,如有问题不吝赐教,感谢!!!