摘要:int a = 0; goto FLAG; //FLAG可以是任意名称 a = 1; FLAG: cout << a << endl; 以上代码的结果就是输出a=0 goto语句将跳转到goto后面的标志位,标志位下写入执行程序。 看着跟汇编有点像
阅读全文
摘要:比较简单的道理: 当刚开始进行训练/进行梯度下降时,距离0梯度还有很长一段过程,所以此时可以大胆地提高训练步长,即保持高学习率 而当梯度下降到一定程度,差不多在0梯度或目标梯度附近变动时,此时若保持高学习率,会造成无法收敛(如图蓝色曲线),所以需要降低学习率,以小步长进行梯度下降 常见的学习率衰减方
阅读全文
摘要:Adam算法其实就是结合了动量梯度下降法和RMSprop算法,是最广为使用的算法,在大多数情况下都有效果。 动量梯度算法和RMSprop算法的复习: 动量:https://www.cnblogs.com/toriyung/p/16467289.html RMS:https://www.cnblogs
阅读全文
摘要:最终目的仍是减少振荡方向(b)的更新幅度,提高前进方向(ω)的更新幅度 引入Sdω和Sdb,如公式表达,由于dω<db,求其均方根作为分母,实现ω的更新幅度大,而b的更新幅度小 注意 1. 使用中为了避免出现√Sdω=0导致除数为0的情况出现,应令√(Sdω+ε) (吴恩达视频中建议ε=1e-8)
阅读全文
摘要:背景 对于标准梯度下降过程,wt的更新是wt=wt-1+△w,而wt=wt-1-△w仅仅是对于当前点wt的△w,没有对于历史数据的考量(通俗点说叫经验教训) 结果就是下降(优化)过程前进方向速度缓慢,同时产生振荡(如图红线) 据此引入冲量v,令vt=vt-1-△w,由迭代思想知冲量v代表着从初始到当
阅读全文
摘要:输入 int a; string b; bool c; cin >> a; cin >> b; cin >> c; //需要注意的是,布尔类型应输入整型而不是英文 输出 int a = 0; cout << "a = " << a <<endl; //endl是end of line,换行的意思 需
阅读全文
摘要:初始化字符串变量时,有两种方式 1. 沿袭C的方式,使用字符数组 char str[] = ""; 2. C++的方式,直接使用字符串变量 string str = "";
阅读全文
摘要:对于5个数值的平均值我们可以使用求和均值计算 对于10个数值的平均值我们也可以使用求和均值计算 对于20个数值的平均值,如果存储条件允许,可以考虑使用求和均值计算 但对于50个数值等甚至更多的数值,直接使用求和均值计算,对于内存来说是十分不友好的。 指数加权平均法,即vt = (1-β)θt + β
阅读全文
摘要:首先应该理解到,梯度下降的最终目的就是使梯度为0,整个过程就是在神经网络计算下梯度朝向0梯度一步步前进,当全样本进行一次计算的时候成为一轮 梯度下降的方式有 批量梯度下降:即对全样本进行梯度下降计算,一轮前进一步,速度慢,但前进方向稳定 随机梯度下降:即随机抽取样本进行梯度下降计算,速度快,但前进方
阅读全文
摘要:1 数据集的分割 对于样本量小的数据集,经典的分割方式是7:3或6:2:2 对于样本量大的数据集,可以分割为98:1:1甚至更小 一言蔽之,关键是保证足够量的测试集和尽可能大的训练集 2 训练结果的评估 在训练集上误差大叫偏差大(bias),在验证集上误差大叫方差大(variance) a. 假如偏
阅读全文
摘要:神经网络的传播(前向)过程如图,如果ω>1(即使是稍微大一点点),只要层数足够多最后会造成ω呈指数上升,这就是梯度爆炸;同理,当ω<1(即使是稍微小一点点),ω会快速缩小逼近0,这就是梯度消失 目前能稍微解决的方法是对ω进行合理地初始化 对于若干层数且每层的神经元数量不尽相同的情况下,比较好的取向是
阅读全文
摘要:图表为损失函数的等高线图 当数据未进行归一化时:不同权重参数的比例十分之大,不同点的梯度下降的过程精确度不尽相同,所以必须减小学习步长,因此学习时长变长 当数据归一化时:权重参数的比例相近,不同点的梯度下降精确度近似,所以可以放心加大学习步长,进而减小
阅读全文
摘要:初始化变量时 float a = 3.14 float b = 3.14f double c = 3.1415926 对于变量a来说,是使用double转换成float的,如果为了省去这一步,需要在数据后加f,如变量b float有效数字为6个,double为15个,但输出时默认都为6,需要指定如
阅读全文
摘要:正则化(regulization)顾名思义,进行调整,以下整理出几个正则化方式 L2正则化 对损失函数J加上一个关于参数ω的范数,用来降低特征值大小 L1范数: 为x向量各个元素绝对值之和。 L2范数: 为x向量各个元素平方和的1/2次方 L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于
阅读全文
摘要:当神经元输出a = z = ωX+b时,该隐藏层则是线性的 假如该神经网络每一个隐藏层都是线性的,根据叠加定理,整个神经网络都是线性的(可认为可以等效为一层线性层的网络结构),这样就无法做出非线性的输出。 而非线性层是不满足叠加定理的,即无法进行等效整合,所以需要引入非线性层,即激活函数。 重点:叠
阅读全文
摘要:假如PA0端口同时用作普通IO输出和USART1输出 而普通IO需要按照我们的要求规则输出高低电平、而USART1又是不同的规律输出高低电平,那么此时唯一的端口PA0如何实现“同时”满足不同输出? 答案就是极其高速的工作,实现“同一时间”重复使用一个端口,即“复用”一词的由来。 其本质是极高的工作频
阅读全文
摘要:其中dW和db出现1/m的原因,是链式法则中dL/da时,由于损失函数L包含了1/m(因为对所有标签y[i]的损失进行平均),求导时保留1/m
阅读全文
摘要:首先要明确的是反向传播的目的 神经网络训练的最终目的,是得到可观的模型参数(如ω,b等)训练参数的方式,就是通过反向传播,使用梯度下降法(一般情况下)改变模型参数。 其原理则是通过最优化损失函数(loss function),即使其导数向0靠近,公式表达为dL/dω,而损失函数L是一个复合函数,则其
阅读全文
摘要:符号表示 ω为神经元线性函数的参数 b为神经元线性函数的参数 z为神经元的线性函数输出 g为激活函数 a为z输入下g的输出 前向传播 据此,对于第L层神经元,可以表示为如图公式组
阅读全文
摘要:背景 假如多个函数内都有着共同的一部分功能(如计时),则可以将该功能分离出来另外调用 python中有着可以直接实现的方法,称之为装饰器(decorator) 具体使用 import time def my_decorator1(func): #装饰器定义 def wrapper(*args): #
阅读全文