美文网首页Python数据科学程序员
深度学习入门--损失函数

深度学习入门--损失函数

作者: 爱吃西瓜的番茄酱 | 来源:发表于2019-03-26 17:07 被阅读5次

    神经网络的学习是指从训练数据中自动获取最优权重参数的过程,损失函数就是用来衡量神经网络的学习的程度,学习的目的就是以该损失函数为基准,找出能使它的值达到最小的权重参数。

    从数据中学习

    神经网络的特征就是可以从数据中学习。所谓“从数据中学习”,是指,可以由数据自动决定权重参数的值。

    数据是机器学习的核心。对于一般的图像识别而言,先是从大量的图像中提取特征量,这里所说的“特征量”是指从输入数据中准确的提取本质数据的转换器。图像的特征量通常表现为向量的形式。在计算机视觉领域,常用的特征量包括SIFT、SURF和HOG等。使用这些特征量将图像数据转换为向量,然后对转换后的向量使用机器学习中的SVM、KNN等分类器进行学习。

    在机器学习的方法中,将图像转换为向量时使用的特征量仍是由人设计的,而在神经网络中,连图像中包含的重要特征量也都是由机器来学习的。

    在机器学习中,一般将数据分为训练数据和测试数据。首先使用训练数据进行学习,寻找最优的参数;然后使用测试数据评价训练得到的模型的实际能力。

    泛化能力是指处理未被观察过的数据的能力,获得泛化能力是机器学习的最终目的。

    过拟合是指可以顺利处理某个数据集,但无法处理其他数据集的情况。

    损失函数

    神经网络的学习中所用的指标称为损失函数,损失函数的值越小,则代表神经网络的学习的效果越好。

    常用的损失函数有两种:

    • 均方误差
    • 交叉熵误差

    均方误差

    用Python实现均方误差:

    import numpy as np
    
    def mean_squared_error(y, t):
        return 0.5 * np.sum((y-t)**2)
    

    这里的参数y和t都是numpy数组,现在再用这个均方误差的公式来实际算一哈:

    # 设"2"为正确解
    t=[0,0,1,0,0,0,0,0,0,0]
    # "2"的概率最高的情况(0.6)
    y=[0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0]
    print(mean_squared_error(np.array(y), np.array(t)))
    
    # 设"2"为正确解
    t=[0,0,1,0,0,0,0,0,0,0]
    # "5"的概率最高的情况(0.6)
    y=[0.1,0.05,0.05,0.0,0.6,0.1,0.0,0.1,0.0,0.0]
    print(mean_squared_error(np.array(y), np.array(t)))
    

    输出为:

    0.09750000000000003
    0.6475
    

    这里的输出y是softmax函数的输出(概率输出);t是监督数据,采用one-hot表示:即正确解标签表示为1,其余解标签表示为0。

    可以看出,第一个例子的损失函数的值更小,也就是说第一个例子的输出结果和监督数据更加吻合。

    交叉熵误差

    用Python实现交叉熵误差:

    import numpy as np
    
    def cross_entropy_error(y, t):
        delta=1e-7  # 添加一个微小值防止溢出
        return -np.sum(t*np.log(y+delta))
    

    同样,参数y和t都是numpy数组。再用上面的例子计算一次:

    # 设"2"为正确解
    t=[0,0,1,0,0,0,0,0,0,0]
    # "2"的概率最高的情况(0.6)
    y=[0.1,0.05,0.6,0.0,0.05,0.1,0.0,0.1,0.0,0.0]
    print(cross_entropy_error(np.array(y), np.array(t)))
    
    # 设"2"为正确解
    t=[0,0,1,0,0,0,0,0,0,0]
    # "5"的概率最高的情况(0.6)
    y=[0.1,0.05,0.05,0.0,0.6,0.1,0.0,0.1,0.0,0.0]
    print(cross_entropy_error(np.array(y), np.array(t)))
    

    输出为:

    0.510825457099338
    2.9957302735559908
    

    可以看出。第一例输出的损失函数的值更小,和前面的结论一致。

    每天学习一点点,每天进步一点点。

    相关文章

      网友评论

        本文标题:深度学习入门--损失函数

        本文链接:https://www.haomeiwen.com/subject/zsagvqtx.html