美文网首页
人工神经网络(2)-- 无导师学习

人工神经网络(2)-- 无导师学习

作者: Byte猫 | 来源:发表于2019-03-22 14:40 被阅读0次

    无导师学习抽取样本集合中蕴含的统计特性,并以神经元之间的联接权的形式存于网络中。Hebb学习规则是一种经典的无导师学习算法。

    Hebb学习规则

    Hebb算法核心思想是,当两个神经元同时处于激发状态时两者间的连接权会被加强,否则被减弱。
    为了理解Hebb算法,有必要简单介绍一下条件反射实验。巴甫洛夫的条件反射实验:每次给狗喂食前都先响铃,时间一长,狗就会将铃声和食物联系起来。以后如果响铃但是不给食物,狗也会流口水。



    受该实验的启发,Hebb的理论认为在同一时间被激发的神经元间的联系会被强化。比如,铃声响时一个神经元被激发,在同一时间食物的出现会激发附近的另一个神经元,那么这两个神经元间的联系就会强化,从而记住这两个事物之间存在着联系。相反,如果两个神经元总是不能同步激发,那么它们间的联系将会越来越弱。
    Hebb学习规则可表示为:

    其中Wij表示神经元j到神经元i的连接权,yi与yj表示两个神经元的输出,a是表示学习速率的常数,如果yi与yj同时被激活,即yi与yj同时为正,那么wij将增大。如果yi被激活,而yj处于抑制状态,即yi为正yj为负,那么wij将变小。

    基于 Hebb 学习规则的方法——自联想存储器

    鸡尾酒会问题是人工智能领域中最有趣也是最有挑战性的问题之一。这是因为在酒会中,我们需要在众多的说话者中将注意力集中在某个说话者身上,且要随时在多个说话者之间切换注意力。人脑能够很好地解决这个问题,目前已有很多种尝试在机器中模拟这种能力的方法。
    自联想存储器是当一个已存储序列的片段,或者加上噪音的版本再次出现时,能够回忆起该序列原貌的存储器。它能够有效地降低输入的噪音,或移除输入中的其他干扰。
    下图描述了自联想存储器的最简单的版本,所有的输入与输出为全连接的单层前向网络结构


    基于 hebb 规则,该网络中的权值 wijwij 的调整会根据以下规则进行调整:

    在训练阶段,自联想存储器的任务是学习模式对 {0,0},{1,1},{2,2},{3,3}的匹配。
    学习规则:

    在测试阶段,我们会对这些数字加了遮挡或是噪声之后作为输入。

    使用训练阶段学习到的 w 权值矩阵,并且由于为控制输出结果向量值为 0 或 1 ,我们采用硬限幅输函数作为激发函数:

    因此测试阶段的输出为:

    下面以图像"0"的记忆和修复做试验:

    # coding = utf-8
    import numpy as np
    from PIL import Image
    import matplotlib.pyplot as plt
    import os
    
    #========================================================
    #  数据预处理
    #========================================================
    
    def transform(img):
        '''
        将图像转为一维向量
        '''
        result = np.int_(img.reshape((-1,1)))
        length = len(result)
        # 为便于分类训练色像素点对应的分量值置黑色为-1,其他置为1 
        for i in range(length):
            if int(result[i]) < 255:
                result[i] = -1
            else:
                result[i] = 1
        print(result)
        return result
    
    #========================================================
    #  训练阶段
    #========================================================
    
    def training(W, img, lr):
        '''
        训练函数
        INPUT --> 权值, 图像, 学习率
        '''
        p = transform(img)
        pLen = len(p)
        # 初始化权值矩阵W全0矩阵
        if W is None:
            W = np.zeros((pLen,pLen))
        t = p
        # 实现训练阶段基于hebb规则的学习过程
        # 使用np.dot()函数实现向量的内积运算
        result = W + lr * np.dot(p,t.T)
        return result
    
    #========================================================
    #  测试阶段
    #========================================================
    
    def hardlim(a):
        '''
        hardlim硬限传输激发函数
        当网络的输入达到阈值时,则硬限幅激活函数的输出为1,否则为0
        '''
        a[a >= 0] = 1
        a[a < 0] = 0
        return a
    
    def testing(W, img):
        '''
        测试函数
        '''
        # 调用激发函数hardlim控制输出结果为0或1
        result = hardlim(np.dot(transform(img).T, W))
        return result
    
    #========================================================
    # 主程序
    #========================================================
    
    if __name__=='__main__':
        # 调用训练函数进行自联想存储器的训练
        W = None
        img_train = np.array(Image.open('0.bmp').convert("L"))
        lr = 0.5
        W = training(W, img_train, lr)
    
        # 利用训练得到的权值矩阵进行测试
        test_old = np.array(Image.open('0_test.bmp').convert("L"))
        test_new = testing(W, test_old).reshape(img_train.shape)
    
        plt.figure(figsize=(10,10))
        plt.subplot(121)
        # 打印待修复图像
        plt.title('old')
        plt.imshow(test_old, cmap=plt.cm.gray)
        plt.subplot(122)
        # 打印修复后图像
        plt.title('new')
        plt.imshow(test_new, cmap=plt.cm.gray)
        plt.show()
    

    相关文章

      网友评论

          本文标题:人工神经网络(2)-- 无导师学习

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