精华内容
下载资源
问答
  • 2019-09-04 16:04:03

    感性认识前馈神经网络

    之所以加上“前馈”这个定语,是想特别强调,这样的网络是没有反馈的,也就是说==靠后的层次不会把输出反向连接到之前的层次上作为输入。==相比于综合交错的人类的大脑神经元的链接结构,这种结构做了极大简化。

    • 对于任意复杂度的连续波莱尔可测函数 f f f,仅仅需要一个隐含层,只要这个隐含层包括足够多的神经元,前馈神经网络使用挤压函数(将较多的输出映射到一个较小的输出),就可以以任意精度来近似模拟 f f f f : R N → R M f:R^N \rarr R^M f:RNRM
    • 想要增加 f f f的近似精度,单纯依靠增加神经元数目即可实现。
    • 单层神经元可以看做是一个超平面,通过调整 w 1 , w 2 w_1, w_2 w1,w2 θ \theta θ的值可以来修正这个平面(修改 θ \theta θ可平移平面,修正 w 1 , w 2 w_1,w_2 w1,w2可旋转平面)。
    • 增加一个神经元相当于增加了一个超平面,这样会划分不同的子空间。
    • 当神经元纵向发展时,可以通过减少单层的神经元数量,而增加神经元网络的层数。
    • 在该层神经元网络中可以完成非线性的映射和转换。增加了神经网络的层数,神经网络也增加了表达能力

    分布式特征表达

    神经网络的学习过程,就是通过训练数据调整神经元之间的链接权值以及每个功能神经元的输出阈值。
    **什么是分布式表征?**就是当我们表达一个概念时,神经元和概念之间不是一对一对应映射(map)存储的,它们之间的关系是多对多的,具体而言,就是一个概念可以用多个神经元共同定义表达,同时一个神经元也可以参与多个不同概念的表达,只不过所占的权重不同罢了。

    损失函数

    (1)0-1损失函数(0-1 Loss Function)
    L ( Y , f ( x ) ) = { 1 , Y ≠ e q u a l f ( x ) 0 , Y = f ( x ) L(Y, f(x))= \begin{cases} 1 , Y \not= equal f(x) \\ 0, Y = f(x) \end{cases} L(Y,f(x))={1,Y=equalf(x)0,Y=f(x)
    (2) 绝对值损失函数(Absolute Loss Function)
    L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y, f(X))=|Y- f(X)| L(Y,f(X))=Yf(X)
    (3)平方损失函数(Quadratic Loss Function):
    L ( Y , f ( x ) ) = ( Y − f ( x ) ) 2 L(Y, f(x))=(Y-f(x))^2 L(Y,f(x))=(Yf(x))2

    梯度弥散

    BP算法非常的经典但是还是有一些问题,当他的残差反向传播到最前面的层(即输入层)时,其影响已经变得非常之小,甚至出现梯度弥散,导致参数调整失去方向性,最终导致BP神经网络非常有限,通常不会超过7层。

    为什么使用最小化损失函数来调整权重

    为什么我们不直接关注如何最大化正确判断(即尽可能最大化正确分类的数量),而是退而求其次,简介考虑最小化损失函数,因为在神经网络中被正确分类的数量n和权重参数w及偏置b之间的关系,很难用一个平滑的函数(方便梯度下降),也就是说在大多数情况下,对权重和偏置做出的微小改变,正确分类的数量可能岿然不动。
    换句话说正确分类的竖向对参数的调整不敏感。这就导致,我们很难通过改变权重和偏置,确定提升性能的优化方向。而使用平滑的损失函数就会好很多,它有更好的感知度,权重和偏置有微小改变输出都会有微妙的影响

    梯度递减的线性回归实战

    批量梯度下降(BGD)公式推导:
    ∂ E ∂ w i = ∂ ∂ w i 1 2 ∑ d ∈ D ( t d − o d ) 2 = 1 2 ∑ d ∈ D ∂ ∂ w i ( t d − o d ) 2 = 1 2 ∑ d ∈ D 2 ( t d − o d ) ∂ ∂ w i ( t d − w T . x ) = ∑ d ∈ D ( t d − o d ) ∂ ∂ w i ( t d − w T . x ) \begin{aligned} \frac{\partial E}{\partial w_i} & = \frac{\partial}{\partial w_i}\frac{1}{2}\sum_{d \in D}(t_d - o_d)^2 = \frac{1}{2}\sum_{d \in D}\frac{\partial}{\partial w_i}(t_d - o_d)^2 \\ & = \frac{1}{2}\sum_{d \in D}2(t_d - o_d)\frac{\partial}{\partial w_i}(t_d - w^T . x) \\ & = \sum_{d \in D}(t_d - o_d)\frac{\partial}{\partial w_i}(t_d - w^T. x) \end{aligned} wiE=wi21dD(tdod)2=21dDwi(tdod)2=21dD2(tdod)wi(tdwT.x)=dD(tdod)wi(tdwT.x)
    注意到:
    w T . x d = w 0 x d 0 + w 1 x d 1 + . . . . w i x d i + . . . . . w n x d n w^T.x_d = w_0x_{d0}+w_1x_{d1}+.... w_ix_{di}+.....w_nx_{dn} wT.xd=w0xd0+w1xd1+....wixdi+.....wnxdn
    因此可以进一步化简:
    ∂ E ∂ w i = ∑ d ∈ D ( t d − o d ) ( − x i d ) = − ∑ d ∈ D ( t d − o d ) x i d \frac{\partial E}{\partial w_i} = \sum_{d \in D}(t_d - o_d)(-x_{id})=-\sum_{d \in D}(t_d - o_d)x_{id} wiE=dD(tdod)(xid)=dD(tdod)xid
    最后得到:
    w i ← w i − η ∂ E ∂ w i = w i + η ∑ d ∈ D ( t d − o d ) x i d w_i \gets w_i - \eta \frac{\partial E}{\partial w_i} = w_i +\eta \sum_{d \in D}(t_d - o_d)x_{id} wiwiηwiE=wi+ηdD(tdod)xid

    bread_price = [[], [], [], [], []]
    def BGD_step_gradient(w0_current, w1_current, points, learningRate):
        w0_gradient = 0
        w1_gradient = 0
        for i in range(len(points)):
           x = points[i][0]
           y = points[i][1]
           w0_gradient = -1.0 * (y - ((w1_current * x) + w0_current))
           w1_gradient = -1.0 * x * (y - ((w1_current * x) + w0_current))
        new_w0 = w0_current - (learningRate * w0_gradient)
        new_w1 = w1_current - (learningRate * w1_gradient)
        return [new_w0, new_w1]
    
    def gradient_descent_runner(points, start_w0, start_w1, l_rate, num_iterations):
        w0 = start_w0
        w1 = start_w1
        for i in range(num_iterations):
            w0, w1 = BGD_step_gradient(w0, w1, points, l_rate)
        return [w0, w1]
    
    def predict(w0, w1, wheat):
        price = w1 * wheat + w0
        return price
    
    if __name__ == '__main__':
        learning_rate = 0.01
        num_iter = 100
        w0, w1 = gradient_descent_runner(bread_parice, 1, 1, learning_rate, num_iter)
        price = predict(w0, w1, 0.9)
        print ("price = ", price)
    

    需要经过多次迭代才可以得到结果。

    更多相关内容
  • 基于本实验和RIT-Dupont各16个非中性色颜色中心的彩度差和色调差数据分别拟合得到相应的彩度权重函数SC_ZJU07和色调权重函数SH_ZJU07。应用获得的视觉实验数据对六个基于CIELAB的典型色差公式的彩度和色调权重函数...
  • 熵权法确定目标函数权重,简单快捷方便,抛出主观因素的影响,希望对大家有帮助
  • 为了有效地平衡粒子群优化算法的全局搜索和局部搜索能力, 提出了一种基于高斯函数递减惯性权重的粒子群优化GDIWPSO算法。此算法利用高斯函数的分布性、局部性等特点, 实现了对惯性权重的非线性调整。仿真过程中, ...
  • 提出了用于设计模糊支持向量机(FSVM)的统计型模糊权重函数,该函数基于模式分类思想为每个训练数据建立一个分类面,数据的模糊权重根据分类面对2类数据的识别率来计算.靠近分类间隔的疑似噪声/离群点将获得相对较小的...
  • 为提高复杂工业系统非线性时间序列预测精度,将工业系统非线性时间序列不同的单个预测模型预测值作 为函数链神经网络的原始输入值,并将原始输入值按正交的三角函数扩展得到的数值...该模糊自适 应变权重函数链神经网络
  • SPSS操作方法:权重函数的选择08归类.pdf
  • 给出了最小距离至少为2的代码的权重分布函数的上限。 刻画了在相等的情况下必须满足的代码。 对于最小距离至少为3的代码,给出了一种改进的权重分配函数的上限。 作为一种应用,具有完全支持的线性代码的未检测到...
  • 改进的权重函数用于非局部均值图像降噪
  • 为了有效评估此类数据中的属性重要程度,提出了一种基于近似函数依赖的属性 权重评估方法.该方法基于一致集的概念导出最大集,生成最小非平凡函数依赖集,从而找出属性之间的近似函数依赖关系,进而求出近似候选码和近似...
  • 基于权重函数的SIFT人脸识别算法的改进.pdf
  • OpenCV-Python图像融合cv2.addWeighted权重加法函数详解.rar
  • 基于高斯函数递减惯性权重的粒子群优化算法.pdf
  • 径向基函数 (RBF) 为多项式提供了一种替代方法,用于计算分散节点上的有限差分权重。 在基函数变平坦的极限中,高斯 RBF 再现多项式权重,因此可以被视为经典有限差分的推广。 然而,几乎平坦的基函数不适合计算,...
  • sigmoid函数是一个logistic函数,意思是说不管输入什么,输出都在0到1之间,也就是输入的每个神经元、节点或激活都会被锁放在一个介于0到1之间的值。 sigmoid 这样的函数常被称为非线性函数,因为我们不能用线性的...
  • 通过引进加法权重效用利润函数和乘法权重效用利润函数概念,分别讨论了批发价合同、回购合同、收入分享合同、数量弹性合同、销售回扣合同和数量折扣合同等6种经典合同在两种权重效用利润意义下的供应链的协调性问题....
  • 交叉熵损失函数权重计算

    千次阅读 2021-07-02 10:01:49
    交叉熵损失函数 torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='elementwise_mean') weight为每个类别的loss设置权重,常用于类别不均衡的问题,...

    交叉熵损失函数

    torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-
    100, reduce=None, reduction='elementwise_mean')

    weight为每个类别的loss设置权重,常用于类别不均衡的问题,weight的数据类型必须是float的tensor,其个数要与分类的类别个数一致(其他参数不介绍)

    weight的计算方法经常使用median frequency balancing,假设有五个类别的分类。那么每个类别都要计算一个频率,以第一类别为例,其计算公式为freq(1)=\frac{a}{b} 

    上面式子中的a表示第一个类别的像素个数,b代表所有包含第一类的照片中的像素个数

    (例如100张图片中有80张包含第一类,那么a就是这80张里面属于第一个类别的像素总数,b就是80张图片的像素总数)

    按照上面的说法五个类别可以计算出五个数字,然后排成一列,找到这5个数字的中值median_freq,然后使用这个中值依次除以上述五个数,得到的新的五个数字就是五个权重。

    展开全文
  • 结合模糊自适应变权重算法计算函数链神经网络权重,对采场声发射事件率进行基于模糊自适应变权重算法的函数链神经网络预测,对其预测结果再进行函数链神经网络算法拟合,然后结合采场冒顶尖点突变模型的判别式对采场...
  • 二元粒子群优化算法传递函数的分析与权重设置。
  • 算法面试之RNN激活函数权重共享

    千次阅读 2022-03-19 03:53:33
    概述 模拟人的阅读顺序 N-Gram模型:认为一个词只和前面N-1个词有关 循环神经网络RNN理论上可以往前(后)看任意多个词 ...1.初始化合理的权重值:初始化权重,使每个神经元尽可能躲开梯度消失的区域,如避免取极

    概述

    模拟人的阅读顺序
    N-Gram模型:认为一个词只和前面N-1个词有关
    循环神经网络RNN理论上可以往前(后)看任意多个词
    在这里插入图片描述
    梯度消失或者梯度爆炸会导致梯度为0或NaN,进而无法继续训练更新参数。上述现象称之为RNN长程依赖问题。
    通常来说,梯度爆炸更容易处理一些。因为梯度爆炸的时候,程序会收到NaN错误。也可以设置一个梯度阈值,当梯度超过这个阈值时直接截取。
    梯度消失更难检测,更难处理。通常有三种缓解梯度消失的方法∶
    1.初始化合理的权重值:初始化权重,使每个神经元尽可能躲开梯度消失的区域,如避免取极大或极小值。
    2.选取合适的激活函数:如用relu代替sigmoid和tanh。
    3.引入合理的记忆网络:如长短时记忆网络(LTSM)、Gated Recurrent Unit(GRU)等。

    激活函数

    sigmoid函数的导数值范围为(0,0.25],反向传播时会导致梯度消失
    tanh函数的导数值范围为 (0,1],相对范围较大,但仍会导致梯度消失
    sigmoid函数不是0中心对称,输出均大于0
    tanh函数是0中心对称,可以使网络收敛的更好
    ReLU函数的左侧导数为0,右侧导数恒为1,避免了小数的连乘,但反向传播中仍有权值的累乘。ReLU函数改善了“梯度消失”现象。

    权重共享

    即使采用了ReLU激活函数,只要W不是单位矩阵,梯度还是会出现消失或者爆炸的现象。
    当采用ReLU作为循环神经网络中隐含层的激活函数时,只有当W的取值在单位矩阵附近时才能取得比较好的效果,因此需要将W初始化为单位矩阵。实验证明,初始化w为单位矩阵并使用ReLU激活函数在一些应用中取得了与长短期记忆模型相似的结果,并且学习速度比长短期记亿模型更快。

    上一篇:算法面试之CNN以及其在NLP的应用
    下一篇:算法面试之LSTM和GRU

    注:本专题大部分内容来自于总结,若有侵权请联系删除。

    展开全文
  • 具有弱正则弯曲函数的具有两个或三个权重的线性代码
  • 直观描述 数学推导 损失函数到第一层权重 到第二层权重 半符号推导
  • 来自二次弯曲函数的具有两个或三个权重的线性代码
  • 深度学习中激活函数权重初始值的选取.pdf
  • 函数空间中多项式权重的一些s值嵌入
  • 损失函数与正则项(惩罚项),多loss间权重设计

    万次阅读 多人点赞 2020-12-02 16:52:14
    正则项(惩罚项) 正则项(惩罚项)的本质 惩罚因子(penalty term)与损失函数...机器学习为什么需要正则项 我们经常看到,标准损失函数通常由两项组成,数据损失项和惩罚项,并将惩罚项乘以超参数λ,用来平衡这两项。

    正则项(惩罚项)

    正则项(惩罚项)的本质

    惩罚因子(penalty term)与损失函数(loss function)

    penalty term和loss function看起来很相似,但其实二者完全不同。
    惩罚因子:
    penalty term的作用就是把约束优化问题转化为非受限优化问题。
    罚函数的基本思想是构造辅助函数,把原来的约束问题转化为求辅助函数极小化的无约束问题。

    在这里插入图片描述

    机器学习为什么需要正则项

    我们经常看到,标准损失函数通常由两项组成,数据损失项和惩罚项,并将惩罚项乘以超参数λ,用来平衡这两项。
    这是为什么呢?

    如果我们只告诉分类器需要拟合训练集的话,可能会导致分类器的行为反常——过拟合,它会尝试完美分类所有的训练数据点。
    在这里插入图片描述
    事实上,如果出现了新的数据点,过拟合的分类器表现就会非常糟糕,我们更倾向于以下这条绿色直线所表示的分类器。
    在这里插入图片描述
    这里涉及到的就是机器学习中一个非常重要的基础问题——正则化。

    为了得到这条绿色直线代表的分类器,我们需要为损失函数增加一个附加的项(正则项),鼓励模型以某种方式选择更简单的W,此处的“简单”取决于任务的规模和模型的种类。

    常见惩罚项:参数范数惩罚、稀疏表征、噪声、早停、dropout等

    深度学习 — 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)

    正则化与矩阵范数:L0范数,L1范数,核范数(很好地解释了采用某种范数作为正则项的好处,以及各种范数的本质区别)

    参数范数惩罚

    机器学习中常使用的正则化措施是去限制模型的能力,最常用的方法就是L0,L1和L2范数惩罚。深度学习优化器中所用的权重衰减,通常就是L2范数惩罚。

    L0范数惩罚

    从不为零的参数出发进行限制,即将不等于0的个数限制在一定的范围内以此达到限制模型的目的,而这种方法就称为L0范数惩罚。
    在这里插入图片描述
    在这里插入图片描述

    L1范数惩罚(参数稀疏性惩罚)

    上面我们是使用参数不为零的个数做约束条件,这里改变的是要求参数数值的总和限制在某个范围内即参数的总和要小于某个值,这种对参数总和的限制就被称为L1范数惩罚,也称为参数稀疏性惩罚
    在这里插入图片描述

    既然L0可以实现稀疏,为什么不用L0,而要用L1呢?
    个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。

    为什么要稀疏?让我们的参数稀疏有什么好处呢?这里扯两点:
    1)特征选择(Feature Selection)(并且特征选择能带来更好的泛化能力):
    大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的信息反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。
    2)可解释性(Interpretability):
    另一个青睐于稀疏的理由是,模型更容易解释。例如患某种病的概率是y,然后我们收集到的数据x是1000维的,也就是我们需要寻找这1000种因素到底是怎么影响患上这种病的概率的。假设我们这个是个回归模型:y=w1x1+w2x2+…+w1000x1000+b(当然了,为了让y限定在[0,1]的范围,一般还得加个Logistic函数)。通过学习,如果最后学习到的w就只有很少的非零元素,例如只有5个非零的wi,那么我们就有理由相信,这些对应的特征在患病分析上面提供的信息是巨大的,决策性的。也就是说,患不患这种病只和这5个因素有关,那医生就好分析多了。但如果1000个wi都非0,医生面对这1000种因素,累觉不爱。

    L2范数惩罚:

    L1范数惩罚虽然可以应用,同时把问题变为求极值的问题,但是还是不完美,因为约束条件带有绝对值,这在数学中不好处理,最简单的方法和损失函数一样就是加入平方项就避免正负抵消问题,这就是L2范数惩罚,也是我们非常熟悉的权重衰减惩罚:
    在这里插入图片描述

    为什么L1-regularization 能产生稀疏性,而L2-regularization 不能稀疏性,只能正则化。
    我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的哦。
    因此,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。
    L1在特征选择时候非常有用,而L2就只是一种规则化而已。

    L2的好处:
    1)学习理论的角度:
    从学习理论的角度来说,L2范数可以防止过拟合,提升模型的泛化能力。(越小的参数说明模 型越简单,越简单的模型则越不容易产生过拟合现象。为什么越小的参数说明模型越简单?我也不懂,我的理解是:限制了参数很小,实际上就限制了多项式某些分量的影响很小)
    2)优化计算的角度:
    从优化或者数值计算的角度来说,L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。

    l1正则与l2正则的特点是什么,各有什么优势?

    l1正则与l2正则的特点是什么,各有什么优势?

    大家一般用 L2 损失函数而不用 L1 损失函数的原因就是:因为计算方便!可以直接求导获得取最小值时各个参数的取值。
    此外还有一点,用 L2 一定只有一条最好的预测线,L1 则因为其性质可能存在多个最优解。(更多关于L1 L2 损失函数参考索引5)
    当然 L1 损失函数难道就没有什么好处了吗,也是有的,那就是鲁棒性 (Robust) 更强,对异常值更不敏感。

    如果数据损失项使用L1 Norm,很明显,L1 Norm对outlier没有L2 Norm那么敏感;如果正则化损失项使用L1的话,那么使学习到的参数倾向于稀疏,使用L2 Norm则没有这种倾向。
    实践中,根据Quaro的data scientist Xavier Amatriain 的经验,实际应用过程中,L1 nrom几乎没有比L2 norm表现好的时候,优先使用L2 norm是比较好的选择。
    链接:https://www.zhihu.com/question/26485586/answer/89215997

    核范数(奇异值系数化)

    核范数||W||*是指矩阵奇异值的和,英文称呼叫Nuclear Norm。这个相对于上面火热的L1和L2来说,可能大家就会陌生点。那它是干嘛用的呢?霸气登场:约束Low-Rank(低秩)
    我们先来回忆下线性代数里面"秩"到底是啥?举个简单的例子吧:
    在这里插入图片描述
    对上面的线性方程组,第一个方程和第二个方程有不同的解,而第2个方程和第3个方程的解完全相同。从这个意义上说,第3个方程是"多余"的,因为它没有带来任何的信息量,把它去掉,所得的方程组与原来的方程组同解。为了从方程组中去掉多余的方程,自然就导出了"矩阵的秩"这一概念。

    还记得我们怎么手工求矩阵的秩吗?为了求矩阵A的秩,我们是通过矩阵初等变换把A化为阶梯型矩阵,若该阶梯型矩阵有r个非零行,那A的秩rank(A)就等于r。回到上面线性方程组来说吧,因为线性方程组可以用矩阵描述嘛。秩就表示了有多少个有用的方程了。上面的方程组有3个方程,实际上只有2个是有用的,一个是多余的,所以对应的矩阵的秩就是2了。
    从物理意义上讲,矩阵的秩度量的就是矩阵的行列之间的相关性。如果矩阵的各行或列是线性无关的,矩阵就是满秩的,也就是秩等于行数。

    约束低秩只是约束rank(w)呀,和我们这节的核范数有什么关系呢?
    他们的关系和L0与L1的关系一样。因为rank()是非凸的,在优化问题里面很难求解,那么就需要寻找它的凸近似来近似它了。对,你没猜错,rank(w)的凸近似就是核范数||W||*

    核范数的用途:

    (1)低秩矩阵,特征降维,鲁棒性PCA:
    既然秩可以度量相关性,而矩阵的相关性实际上有带有了矩阵的结构信息。如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达了,它就是低秩的。所以我们总结的一点就是:如果矩阵表达的是结构性信息,例如图像、用户-推荐表等等,那么这个矩阵各行之间存在这一定的相关性,那这个矩阵一般就是低秩的。
    如果X是一个m行n列的数值矩阵,rank(X)是X的秩,假如rank (X)远小于m和n,则我们称X是低秩矩阵。低秩矩阵每行或每列都可以用其他的行或列线性表出,可见它包含大量的冗余信息。利用这种冗余信息,可以对缺失数据进行恢复,也可以对数据进行特征提取。
    另外的见解:将系数的稀疏性,拓展到矩阵奇异值的稀疏性上,就从L1范数变成了核范数。

    Candes等人提出了Robust PCA,通过对矩阵施加奇异值的稀疏性(从l1变成了nuclear norm)来自动学得降维的维数,同时还能对原始矩阵去噪(可以看我写的另一个答案如何理解矩阵的「秩」? - 过拟合的回答)。这也引出了另一个新思路:一般来说数据矩阵可能存在野点,即少部分行被污染了,因此可以求取某个行稀疏的野点矩阵,来“净化”原始矩阵。这里稀疏性就是施加在待求解的野点矩阵上。
    链接:https://www.zhihu.com/question/26602796/answer/36470745

    与经典PCA一样,Robust PCA(鲁棒主成分分析)本质上也是寻找数据在低维空间上的最佳投影问题。当观测数据较大时,PCA无法给出理想的结果,而Robust PCA能够从较大的且稀疏噪声污染的观测数据中恢复出本质上低秩的数据。Robust PCA考虑的是这样一个问题:一般的数据矩阵D包含结构信息,也包含噪声。那么可以将这个矩阵分解为两个矩阵相加:D = A + E,A是低秩的(由于内部有一定的结构信息造成各行或列间是线性相关的),E是稀疏的(含有噪声,则是稀疏的),则Robust PCA可以写成以下的优化问题:
    在这里插入图片描述
    摘自:正则化与矩阵范数:L0范数,L1范数,核范数
    此外,可以参考和学习的网文:(1)PCA 与 Robust PCA区别 (2)张量(三):张量鲁棒主成分分析(TRPCA)(3)https://github.com/nwbirnie/rpca/blob/master/rpca.py(RPCA代码)

    (2)秩最大化与多样性:
    核范数是矩阵秩的凸逼近
    矩阵秩越大,则多样性越好
    神经网络的输出是一个矩阵[B x C](其中,B是batchsize,C是类别数,采用了one-hot编码),输出矩阵的秩越大,则表示样本之间是独立的(矩阵的行之间独立,不能归于同一类),独立则说明有好的多样性。
    详见:2020-CVPR oral Towards Discriminability and Diversity: Batch Nuclear-norm Maximization under Label Insufficient Situations
    (3)Frobenius范数最大化与判别性
    核范数是Frobenius范数的上界
    Frobenius范数越大,则判别性越好(即预测出来的样本越接近one-hot编码,也即信息熵越小)。
    详见:2020-CVPR oral Towards Discriminability and Diversity: Batch Nuclear-norm Maximization under Label Insufficient Situations

    参数共享与参数绑定

    目前为止,我们讨论的正则化措施都是通过限制模型参数的方法来限制模型的能力,但这种通用的限制太过宽泛。
    卷积操作,其实就是参数共享。参数共享使得卷积网络极大地降低了参数的规模,是另一种形式的参数惩罚项。

    在神经网络的隐藏层或参数中注入噪声

    对于某些模型,注入噪声也相当于对参数进行范数惩罚。通常而言,注入噪声要比简单地收缩参数更有效,尤其是将噪声注入到隐藏层中。而隐藏层注入噪声是一个重要的主题,我们将在差算法中重点介绍,该方法也可以看作是通过加入噪声重构新输入的一种正则化策略。
    除了在隐藏层输入中注入噪声,在权重(参数)中注入噪声也是一种有效的正则化措施。这种方法在某种程度上可以等价地解释为传统的范数惩罚,该方法鼓励参数找到一个参数空间,而该空间对于微小的参数变化所引起的输出变化的影响很小。换而言之,就是将模型送进了一个对于微小变化不敏感的区域,我们不仅找到了最小值,我们还找到了一个宽扁的最小值区域

    稀疏表征(表征稀疏性惩罚)

    参考:
    (1)深度学习 — 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)
    (2)稀疏表达的意义在于?为什么稀疏表达得到广泛的应用?
    (3)稀疏表示去噪的理解

    在上面参数范数惩罚中,我们通过直接限制可用参数规模,如L1,L2参数惩罚,来限制模型的能力,从而降低过拟合风险。
    接下来,我们介绍一种通过作用在神经网络激活单元的惩罚策略,来提高隐藏层的稀疏性,该方法可算作是一种间接的模型参数惩罚。

    生物进化的一个重要趋势就是尽可能地节约能源,而我们的大脑也符合节能的原则大脑。中每个神经元都连接着成千上万的神经元,但其实大部分神经元都是处于抑制状态,只有少部分的神经元接受刺激会处于激活状态,因此我们需要将特定的信息交给特定的神经元进行处理。受此启发,我们就期望使用某种惩罚措施来抑制大部分神经元。当信息输入进神经网络时,只有关键部分神经元才能够处于激活状态,这就是稀疏表征(稀疏表示)
    我们已经讨论过凵范数如何致使参数稀疏化,这就意着大多 数都为零或接近于零,而表征稀疏化描述的其实就是隐藏层的输出大多数为零或接近零
    为了简明地阐述这些区别我们以一个线性回归为例,如下图所示,是一个参数稀疏化的线性回归模型:一个是使用稀疏表征的线性回归。
    在这里插入图片描述

    虽然表征正则化与参数正则化(一个使得输出稀疏,一个使得参数稀疏)有些区别,但幸运的是它们都使用相同的机理来实现。如下式所示,表征范数惩罚也是通过在代价函数中一项添加惩罚表征项 来实现表征稀疏化
    在这里插入图片描述
    表征惩罚的具体计算方法:

    • 方法一:使用和L1惩罚相同的方式: Ω \Omega Ω (h)= ∥ h ∥ = ∑ ∣ h i ∣ \left\| h \right\| =\sum\left| h_i \right| h=hi
    • 方法二:KL散度(KLdivergence),又称相对熵(RelativeEntropy)也是一种十分常用的方法(稀疏自编码器就是用的KL散度)。

    稀疏自编码器 & 表征稀疏惩罚项

    自编码器基本原理

    自动编码器的作用之稀疏编码
    在这里插入图片描述
    如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?
    我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。
    因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到

    (1)逐层训练
    自编码器的训练方法:通过编码器产生特征,然后训练下一层,这样逐层训练。

    首选训练一个只有一层的编码器。
    在这里插入图片描述

    那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的是一个东西)。

    那第二层和第一层的训练方式就没有差别了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。
    在这里插入图片描述

    其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了)。
    (2)有监督微调:

    经过上面的方法,我们就可以得到很多层了。至于需要多少层(或者深度需要多少,这个目前本身就没有一个科学的评价方法)需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。

    到这里,这个AutoEncoder还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。

    那么,为了实现分类,我们就可以在AutoEncoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)去训练

    也就是说,这时候,我们需要将最后层的特征code输入到最后的分类器,通过有标签样本,通过监督学习进行微调,这也分两种:

    • 只调整分类器
    • 微调整个编码器+分类器
    稀疏自编码器

    当然,我们还可以继续加上一些约束条件得到新的Deep Learning方法,如:如果在AutoEncoder的基础上加上 L1 的正则限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder法。
    在这里插入图片描述
    上面公式中:h是编码

    如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的)。

    KL散度诱导稀疏—稀疏自编码器的损失函数中的稀疏惩罚项

    先来看一下稀疏自编码器的完整损失函数:
    在这里插入图片描述
    损失函数分为三项:

    • 第一项是普通的损失函数,用来指示输入输出的相似度,使得重构误差小;
    • 第二项是表征稀疏惩罚项,诱导隐层中的激活值向量稀疏。可以用L1范数,也可以用KL散度(大多用KL散度);
    • 第三项是防止过拟合而添加的正则化项是权重衰减项!

    为什么稀疏自编码器的正则项选用了相对熵(KL散度)的函数?
    在这里插入图片描述

    如果事先设定某个较小的值 ρ ∗ \rho^* ρ,那么稀疏性度量就可以采用两个概率分布 ρ j \rho_j ρj ρ ∗ \rho^* ρ 之间的差异来表示。

    下面看一个github上的实例:Sparse Autoencoders (Sparsity constraint is imposed here by using a KL-Divergence penalty. The FashionMNIST dataset was used for this implementation.)
    在这里插入图片描述
    在这里插入图片描述
    github项目:Semi Supervised Learning Using Sparse Autoencoder(稀疏自编码器与半监督)
    github项目:Crosswise Sparse Autoencoder(稀疏自编码器与医疗图像,相关paper:Sparse autoencoder for unsupervised nucleus detection and representation in histopathology images

    噪声与数据扩充

    数据扩充

    在机器学习中,想要降低泛化错误率最好的方法是训练更多的数据,但在现实中,数据总是有限的,并且还需要大量的成本。那么问题就来了,更多的数据使得模型性能更好,但我们又没有更多的数据,那该怎么办呢?其中一个有用而高效的方法就是生成伪造数据(fakedata),然后将这些数据添加到训练集中进行数据扩充(DataAugmentation)。虽然听上去似乎在教大家“造假”,但对于某些机器学习任务而言,创造新的伪造数据是非常合理的。
    在分类任务中,分类器需要使用复杂高维的输入数据X以及数据所对应的类标进行关联学习。这也意味着,分类器面临的主要任务是从各种变化的数据中获得某种稳定分布的不变性。既然平移,旋转后的图像都是同一个对象,那么在训练数据中扭曲一定程度的输入数据X,分类器也应该将该数据 进关联,但这一方法的应用范围还比较窄。例如在密度估计任务中,要生成新的伪造数据是非常困难的,因为生成新数据的前提是我们己经解决了密度估计问题。
    生成伪造数据最佳的应用场景是一类特定的分类任务。 - 对象识别图片是一种高维复杂的数据“并且有着平移,旋转不变性等特点在上面,介绍了如果一幅图片全部向右平移一个像素,那对于机器学习算法来说,便彻底成了一幅新冬像,因此我们需要先验地加入参数共享等措施来学习网络。那我们不妨换个角度,我们将这些先验知识加入到数据中去,即平移,旋转,拉伸之后的图像数据依然是原数据对象。我们将这些生成的“新图像数据”加入训练集中训练,那训练数据就可能增加十余倍的数据量,这样训练出来的模型同样也可以其备这种空间不变性能力,但我们必须谨慎地去变换这些 。例如在字符识别中,将b,和d,水平翻转,旋转180°,那就都成了同一个数据。此时的伪造数据,就真的变成了错误数据。

    注入噪声

    在输入中注入噪声

    数据扩充也可以看作是在输入数据中注入噪声,从而迫使算法拥有更强的健壮性(也可以将注入噪声看作是一种数据扩充)。神经网络容易过拟合的原因之一就是对于噪声没有太好的抗噪能力。正所谓“你怕什么,就应该勇敢地去面对什么。”最简单的提高网络抗噪声能力方法,就是在训练时加入随机噪声一起训练。比如在非监督学习算法降噪自动编码器(Denoising Autoencoder)中,在输入层进行噪声注入然后学习无噪声的冬片,便是一种很好的提高网络健壮性的方式。

    在神经网络的隐藏层或参数中注入噪声

    对于某些模型,注入噪声也相当于对参数进行范数惩罚。通常而言,注入噪声要比简单地收缩参数更有效,尤其是将噪声注入到隐藏层中。而隐藏层注入噪声是一个重要的主题,我们将在差算法中重点介绍,该方法也可以看作是通过加入噪声重构新输入的一种正则化策略。
    除了在隐藏层输入中注入噪声,在权重(参数)中注入噪声也是一种有效的正则化措施。这种方法在某种程度上可以等价地解释为传统的范数惩罚,该方法鼓励参数找到一个参数空间,而该空间对于微小的参数变化所引起的输出变化的影响很小。换而言之,就是将模型送进了一个对于微小变化不敏感的区域,我们不仅找到了最小值,我们还找到了一个宽扁的最小值区域

    在标签中注入噪声

    数据集中或多或少都带有错误的类标签,如果我们使用这些数据进行训练,那这就好比一个专心听讲且对老师十分尊敬的好学生,认真学习老师教给他的所有知识,但老师教给他的却是错误的知识。最不幸的是,学生还对老师深信不疑,即使发现了错误,也只会认为是自己愚钝,不断地否定自己,不断地在痛苦中挣扎。虽然我们竭尽全力地避免错误标记数据,但这并不如我们想象得那么美好,人为地添加错误在所难免。与其小心翼翼地标记数据做个完美的“老师”,还不如直接就告诉学生“老师”并不完美,“老师”也会犯错。
    解决这种问题的具体措施就是在标签中加入一定的噪声,例如可以设置一个很小的常数 λ \lambda λ,我们将训练数据的标签Y错误的概率设置为 λ \lambda λ.

    早停

    目前为止,我们针对过拟合现象所做的正则化措施总结起来有两点:

    • 一是限制模型或表征的能力,包括(参数惩罚,表征惩罚),就如同“孤已天下无敌(训练错误率很低),让你双手又如何”。
    • 二是不断地加入噪声,给自己增加麻烦,就如同’放一碗水在头顶扎马步,穿着加沙的背心去奔跑,最终目的是使自己更强壮’。

    而下面,我们介绍的这种正则化方法就非常简单了。
    基于梯度下降的深度学习算法都存在一个训练周期的问题,训练的次数越多,训练错误率就越低。由于我们真正目的是降低测试错误率,因此我们期望验证错误率也与训练错误率有相似的曲线。但期望总是事与愿违,真实环境中的验证错误率并没有随着训练次数的增多而减少,而是形成了一种“U型“曲线,验证错误率先减小后上升。那很自然地,我们就期望能在验证错误率的最低点(或最低点附近)停止训练算法,这就是所谓的早停(EarlyStopping)

    dropput

    Dropout可以看作是多个模型的集成,即通过结合几个模型降低泛化误差的技术。分别训练几个不同的模型,然后让所有模型表决测试样例的输出,也被称为模型平均。模型平均奏效的原因是不同的模型通常不会再测试集上产生完全相同的误差。

    多任务学习中各loss权重应该如何设计呢?

    多任务学习中各loss权重应该如何设计呢?
    Multi-task中的多任务loss平衡问题
    多任务学习权重的动态调整

    展开全文
  • # Pytorch实现多分类问题样本不均衡的权重损失函数FocusLoss
  • 基于正切函数改进惯性权重的新型粒子群算法,李丽,薛冰,粒子群算法中惯性权重的设置对算法性能有很大影响,本文在简要介绍粒子群算法及惯性权重作用的基础上,结合对正切函数变化规律的
  • 大多数据集类别是不平衡的,可以通过调整损失函数权重,来平衡各类别。 (1)神经网络每次训练过程中,给予不同的类别权重,选择最有的结果作为最优类别权重;但是这样花费的时间成本很高;因此可以通过如下策略...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 245,949
精华内容 98,379
关键字:

什么是权重函数