算法篇——算法杂记

注意平时的思考杂记,不对外展示

思考点杂烩

1、元集到元集的满射情况
在这里插入图片描述
2、切平面与切空间问题
线与平面:在这里插入图片描述
平面与空间(3维空间)
在这里插入图片描述

3、关于凸函数的描述
f1和f2是凸函数,那么f1+f2也是凸函数;
f1是凸函数,那么b*f1也是凸函数;
4、关于过拟合的措施
增加数据量:让更多的特殊情况表征在模型里,模型训练的边界也会越来越平滑;
使用Dropout:说的简单一点就是,我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。参考
使用batchNorm:
顾名思义,batch normalization嘛,就是“批规范化”。在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1. 而最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入。主要是为了维持数据的输入分布的稳定性。参考
5、主题建模
常见的主题模型:
(1)PLSA(Probabilistic Latent Semantic Analysis)
(2)LDA(Latent Dirichlet Allocation)
(3)L-LDA(Label Latent Dirichlet Allocation)
参考
6、L2 norm
L1 norm就是曼哈顿距离,L2 norm就是欧式距离。
L0-norm也就是直接统计参数不为0的个数作为规则项,但实际上却不好执行于是引入了L1-norm;而L1norm本质上是假设参数先验是服从Laplace分布的,而L2-norm是假设参数先验为Gaussian分布。
7、激活函数
sigmoid函数
在这里插入图片描述
在这里插入图片描述
tanh函数
在这里插入图片描述
在这里插入图片描述Relu函数
在这里插入图片描述
在这里插入图片描述
ELU (Exponential Linear Units)
在这里插入图片描述
在这里插入图片描述
8、ROC与AUC(Area Under Curve)
AUC被定义为ROC曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。AUC越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值。
在这里插入图片描述
ROC曲线:
于其他的P-R曲线(精确度和召回率),ROC曲线有一个巨大的优势就是,当正负样本的分布发生变化时,其形状能够基本保持不变,而P-R曲线的形状一般会发生剧烈的变化,因此该评估指标能降低不同测试集带来的干扰,更加客观的衡量模型本身的性能。
参考
9、小题
同时查找 2n 个数中的最大值和最小值,最少比较次数为:3n-2。
思路:首先前两个比较并赋值,剩下的2n-2个两两比较,然后大的跟大的比小的跟小的比总共3(n-1)合计3n-2.
10、c语言中的小注意
fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
11、深度学习训练中梯度消失的原因有哪些?有哪些解决方法?
梯度消失产生的主要原因有:一是使用了深层网络,二是采用了不合适的损失函数。

(1)目前优化神经网络的方法都是基于BP,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助。而链式法则是一个连乘的形式,所以当层数越深的时候,梯度将以指数形式传播。梯度消失问题一般随着网络层数的增加会变得越来越明显。在根据损失函数计算的误差通过梯度反向传播的方式对深度网络权值进行更新时,得到的梯度值接近0,也就是梯度消失。

(2)计算权值更新信息的时候需要计算前层偏导信息,因此如果激活函数选择不合适,比如使用sigmoid,梯度消失就会很明显,原因如果使用sigmoid作为损失函数,其梯度是不可能超过0.25的,这样经过链式求导之后,很容易发生梯度消失。

解决方法:

(1)pre-training+fine-tunning

此方法来自Hinton在2006年发表的一篇论文,Hinton为了解决梯度的问题,提出采取无监督逐层训练方法,其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。此思想相当于是先寻找局部最优,然后整合起来寻找全局最优,此方法有一定的好处,但是目前应用的不是很多了。

(2) 选择relu等梯度大部分落在常数上的激活函数

relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失的问题。

(3)batch normalization

BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失的问题,或者可以理解为BN将输出从饱和区拉到了非饱和区。

(4) 残差网络的捷径(shortcut)

相比较于之前的网络结构,残差网络中有很多跨层连接结构(shortcut),这样的结构在反向传播时多了反向传播的路径,可以一定程度上解决梯度消失的问题。

(5)LSTM的“门(gate)”结构

LSTM全称是长短期记忆网络(long-short term memory networks),LSTM的结构设计可以改善RNN中的梯度消失的问题。主要原因在于LSTM内部复杂的“门”(gates),LSTM通过它内部的“门”可以在更新的时候“记住”前几次训练的”残留记忆“。
12、什么叫过拟合,过拟合的解决办法有哪些?
过拟合:在机器学习模型训练或者深度学习模型训练的过程中,会出现模型在训练集上表现能力好,但是在测试集上表现欠佳,这种现象就是过拟合,常常主要原因是由于数据集中存在噪音数据或者训练样本维度太少或者训练集数量太少导致的。
解决方案:
增强训练样本集;
增加样本集的维度;
如果模型复杂度太高,和训练样本集的数量级不匹配,此时需要降低模型复杂度;
正则化,尽可能减少参数;
添加Dropout
13、二叉搜索树的搜索规则:
首先将待查关键字key与根节点关键字t进行比较:
a.如果key = t, 则返回根节点指针。
b.如果key < t,则进一步查找左子书。
c.如果key > t,则进一步查找右子树。
14、主定理
来自百度百科的解释:
在这里插入图片描述
来自别的博客的延申:
在这里插入图片描述
附上链接:https://www.cnblogs.com/oier/p/9454539.html
接下来给出我自己对这个问题的推导,见博客:主定理
15、常见的线性结构和非线性结构
常用的线性结构有:线性表,栈,队列,双队列,串。
关于广义表、数组,是一种非线性的数据结构。
常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图
线性结构
1.集合中必存在唯一的一个"第一个元素";
2.集合中必存在唯一的一个"最后的元素";
3.除最后元素之外,其它数据元素均有唯一的"后继";
4.除第一元素之外,其它数据元素均有唯一的"前驱"。

留个坑再补充

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值