精华内容
下载资源
问答
  • 简单的神经元模型

    万次阅读 2018-04-09 20:30:38
    简单的神经元模型 线性神经元 其函数表达如下所示: y=b+∑ixiwiy=b+∑ixiwiy=b+\sum_ix_iw_i 其中,www表示权值,xxx表示输入。yyy表示输出。 线性神经元模型中,输入xi可以被看作是 来自其他神经元的动作电位...

    简单的神经元模型

    线性神经元

    其函数表达如下所示:

    y=b+ixiwiy=b+∑ixiwi

    其中,ww表示权值,xx表示输入。yy表示输出。
    线性神经元模型中,输入xi可以被看作是 来自其他神经元的动作电位,该动作电位引起突触的兴奋。权重 wi 可以认为是对突触的影响系数。wi 的值越大,输入xi对神经元输出的影响程度就越大。在一个真正的神经元中,某些因素能够决定 wi可以是突触vescicles中的突触前末梢的数量,或配体门控通道在突触后膜的数量。

    二进制阈值神经元

    二进制阈值神经元可以表示为:

    y={><= 1= 0y={输入值>阈值= 1输入值<阈值= 0

    简单的如果输入值小于阈值,则输出结果为0,如果输入值大于阈值,则输出结果为1.

    Rectified Linear Neurons(ReLu)

    综合第一种神经元和第二种神经元可以得到ReLu。具体函数表达式如下所示:

    z=b+ixiwiz=b+∑ixiwi

    y={z0if z > 0otherwisey={zif z > 00otherwise

    具体如下图所示:
    这里写图片描述

    sigmoid neurons

    具体函数表达如下所示:

    z=b+ixiwiz=b+∑ixiwi

    y=11+exp(z)y=11+exp(−z)

    具体如下图所示:
    这里写图片描述
    优点:使用逻辑回归函数,并且导数光滑。
    缺点:计算量大。

    随机二进制神经元

    具体函数表达如下所示:

    z=b+ixiwiz=b+∑ixiwi

    p(s=1)=11+exp(z)p(s=1)=11+exp(−z)

    输出值是1或0,如果值很大,则可能输出1(有很大概率),如果值很小,则输出值可能是0(有很大概率)。
    展开全文
  • 神经网络 II:神经元模型

    千次阅读 2017-10-24 10:02:01
    人工神经网络的生物原型是大脑,人脑中的神经网络是一个非常复杂的组织,其基本组成单位是神经元(神经细胞),成人的大脑中估计有1000亿个神经元之多。十九世纪末二十世纪初,在解剖学家、生物学家、医学家的共同...

    人工神经网络的生物原型是大脑,人脑中的神经网络是一个非常复杂的组织,其基本组成单位是神经元(神经细胞),成人的大脑中估计有1000亿个神经元之多。十九世纪末二十世纪初,在解剖学家、生物学家、医学家的共同努力下,神经元的组成结构便被研究清楚,一个神经元主要由四部分构成:

    • 细胞体:它是神经元的本体,内有细胞核和细胞质,完成普通细胞的生存功能。
    • 树突:它有大量的分枝,多达103103数量级,长度较短(通常不超过1毫米),用以接收来自其它神经元的信号。
    • 轴突:它用以输出信号,有些较长(可达1米以上),轴突的远端也有分枝,可与多个神经元相连。
    • 突触:它是一个神经元与另一个神经元相联系的特殊部位,通常是一个神经元轴突的端部靠化学接触或电接触将信号传递给下一个神经元的树突或细胞体。
      这里写图片描述

    神经元怎么发挥作用呢?其实神经元是个信号处理单元,它有两种状态:兴奋和抑制。平时处于抑制状态的神经元,当接收到其它神经元经由突触传来的冲击信号时,多个输入在神经元中以代数和的方式叠加。如果叠加总量超过某个阈值,神经元就会被激发进入兴奋状态,发出输出脉冲,并由轴突的突触传递给其它神经元。神经元被触发后有一个不应期,在此期间内不能被触发,然后阈值逐渐下降,恢复原来状态。

    神经元模型便是模拟大脑神经元的运行过程,其包含输入,输出与计算功能,输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。下图是一个典型的神经元模型:包含有mm个输入,1个输出,以及2个计算功能:

    这里写图片描述

    输入信号来自外部或别的处理单元的输出,在数学上表示为行向量x=(x1,x2,,xm)x=(x1,x2,…,xm),其中xixi为第ii个输入的激励电平,mm表示输入数目。

    连接到结点kk的加权表示为加权向量Wk=(wk1,wk2,,wkm)Wk=(wk1,wk2,…,wkm),其中wkiwki表示从结点ii(或第ii个输入点)到结点kk的加权,或称iikk结点之间的连接强度。

    计算功能的主要作用是对每个输入信号进行处理以确定其强度(加权);确定所有输入信号的组合效果(求和);然后确定其输出(转移特性)。

    考虑到内部阈值bkbk,用x0=1x0=−1的固定偏置输入点表示,其连接强度取wk0=bkwk0=bk。于是,可得输入的加权和为:

    vk=i=1mxiwkibk=i=0mxiwki.vk=∑i=1mxiwki−bk=∑i=0mxiwki.

    处理单元的激励电平vkvk通过一个转移函数φ()φ(⋅),得到处理单元的最后输出值ykyk

    yk=φ(vk)=φ(i=0mxiwki).yk=φ(vk)=φ(∑i=0mxiwki).

    转移函数φ()φ(⋅)也称激励函数、传输函数或限幅函数,其作用就是将可能的无限域变换到一指定的有限范围内输出,这类似于生物神经元具有的非线性转移特性。常用的转移函数有线性函数、斜坡函数、阶跃函数、符号函数、Sigmoid函数、双曲正切函数、ReLU函数等。具体的可参考博客深度学习常用激活函数

    神经元模型的使用可以这样理解:假设有一个新的数据样本,其有多个属性,其中mm个属性已知,1个属性未知。此时需要做的就是通过mm个已知属性预测未知属性。通常情况下已知的属性称之为特征,未知的属性称之为目标。若已经得到表示特征与目标之间关系的权值wk1wk1w2w2w3w3,那么就可以通过神经元模型预测新样本的目标。可见,一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。
      

    参考资料

    1. https://wenku.baidu.com/view/601de31452d380eb62946d7b.html 05神经网络原理及应用
    2. https://item.jd.com/11867803.html 《机器学习》 周志华
    3. http://www.cnblogs.com/subconscious/p/5058741.html#second 神经网络浅讲:从神经元到深度学习
    展开全文
  • 神经网络-自适应神经元

    千次阅读 2017-11-18 15:38:49
    自适应神经元 前言 感知机存在的问题 自适应神经元 算法步骤 权重初始化 计算预测值 更新权重 更新阈值 代码部分 自适应神经元前言本博客讲解的是自适应性神经元,为以后的深度学习打下基础。 本文章是阅览技术文档...

    自适应神经元

    前言

    本博客讲解的是自适应性神经元,为以后的深度学习打下基础。
    本文章是阅览技术文档加以实现和理解。
    原文地址:http://www.ranling.com/category/it/689240.html
    这篇博客是继上一篇博客写下的。
    神经网络-感知器:http://blog.csdn.net/skullfang/article/details/78564490#

    感知机存在的问题

    根据上一篇博客的算法来看 收敛就是感知机存在的最大问题。
    如果有一个两个数据每一次迭代都不能达到正确,那么算法就会不停的更新权重,就是“学不停”!
    另外一个缺陷就是学习效果有一定局限性,什么意思呢?就是一旦分类正确他就会停止更新权重,这会导致它只正对样本数据有正确结果,对其他的样本有很大的误差。

    自适应神经元

    前面的原理还是一样的,由“树突“刺激超过阈值就能激活。
    这里写图片描述

    这里使用的激活函数是一个线性激活函数,不再是单元阶跃函数。这个 函数最大的好处就是能够可微,既然可微就可以找到最小代价函数。这里定义一个和方差公式

    这里写图片描述

    注意这里后面那个小尾巴output(i)只是一个定义域,不要认为它是公式的一部分。

    使用梯度下降算法,来找过系统的局部最优
    这里写图片描述

    既然梯度下降,我们的权重更新就是按照j(w)进行下降。
    (△是大写希腊字母Delta表示变量的分量,▽读Nabla,奈不拉,也可以读作“Del”求偏导)
    enter image description here

    这里会有疑问为什么W的增量要加上损失函数的偏导数,我们仔细观察上面的梯度下降的图,w如果想要按照理想的方向走,那么损失函数的偏导是正数就说明w在jmin(w)右边,我们只需要用w减去那个偏导即可。同理如果ww在jmin(w)左边,偏导就是负数,我们只需要减去它,w就在往右边跑。

    求偏导
    这里写图片描述
    整合一下
    这里写图片描述

    算法步骤

    这个算法步骤跟上一篇博客感知器的步骤基本相同,不同的就是更新权重和更新阈值这里。感知器更新就是反复左右推,而这里使用了梯度下降的算法,理论上可以达到局部最优。
    1、权重初始化
    2、计算预测值
    3、更新权重
    4、更新阈值

    权重初始化

    与感知机一样把权重初始化为0或者比较小的随机数。

    计算预测值

    z=dot(W,X) W为权重向量,X为输入向量。
    与感知器不同的是这里不需要转换为标签值。只需要一个z这个实数就可以。

    更新权重

    这里写图片描述

    如上一章所示,W的增量是根据损失函数的偏导数。进行调整。

    更新阈值

    这里的阈值还是作为W向量的第0号元素(不明白怎么来的可以参考感知机那篇博文)那么更新方法也是一样的。只不过w0 没有Xj对应那么。
    W(0)等于上图的公式不要后面Xj(i)那个尾巴。

    代码部分

    可以参考感知器的代码看,不一样的就是阈值和权重更新方面。看不懂的可以私信。

    # -*- coding: utf-8 -*-
    # @Time    : 2017/11/17 上午10:10
    # @Author  : SkullFang
    # @Email   : yzhang_wy@163.com
    # @File    : main.py
    # @Software: PyCharm
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.colors import ListedColormap
    class AdalineGD(object):
        """
        eta : 学习率
        n_iter: 学习次数
        w_: 权重向量
        error_:错误判断次数
        """
        def __init__(self,eta=0.01,n_iter=50):
            """
            :param eta: 学习率
            :param n_iter: 次数
            """
            self.eta=eta
            self.n_iter=n_iter
    
        def fit(self,x,y):
            """
            :param x: 二维数组[向量,条数]
            :param y: 每一条的正确分类
            :return: 
            """
            self.w_=np.zeros(1+x.shape[1])
            self.cost_=[]
    
            for i in range(self.n_iter):
                output=self.net_input(x)
                error=(y-output)#对应公式
                self.w_[1:]+=self.eta * x.T.dot(error)
                self.w_[0]+=self.eta*error.sum()
                #损失函数 就是图中的J(W)
                cost=(error ** 2).sum()/2.0
                self.cost_.append(cost)
    
            return self
    
    
    
        def net_input(self,x):
            """
            这个是为了输入向量和权重向量做一下点积
            :param x: 输入向量
            :return: 
            """
            return np.dot(x,self.w_[1:]+self.w_[0])
            pass
    
        def predict(self, x):
            """
            算出分类结果
            :param x: 
            :return: 
            """
            return np.where(self.activation(x) >= 0.0, 1, -1)
    
        def activation(self,x):
            """
            激活函数
            :param x: 
            :return: 
            """
            return self.net_input(x)
    

    函数调用部分

    if __name__ == '__main__':
        file = "data/irisdata.csv"
        df=pd.read_csv(file,header=None)
        #前10行
        # print(df.head(10))
        #加载0到100行第4列
        y=df.loc[0:100,4].values
        y=np.where(y=='Iris-setosa',-1,1)
        #x要第0列和2列
        x=df.loc[0:100,[0,2]].values
    
        plt.scatter(x[:50, 0], x[:50, 1], color='red', marker='o', label='setosa')
        plt.scatter(x[50:100, 0], x[50:100, 1], color='blue', marker='x', label='versicolor')
        plt.legend(loc='upper left')
    
    
    
        ada=AdalineGD(eta=0.0001,n_iter=100)
        ada.fit(x,y)
        plot_decision_regions(x,y,classifier=ada,resolution=0.2)
    

    画图函数

    def plot_decision_regions(x,y,classifier,resolution=0.02):
        """
        用于结果展示
        :param x: 
        :param y: 
        :param classifier: 
        :param resolution: 
        :return: 
        """
        makers=('s','x','o','v')
        colors=('red','blue','lightgreen','gray','cyan')
        cmap=ListedColormap(colors[:len(np.unique(y))])
    
        x1_min,x1_max=x[:,0].min()-1,x[:,0].max()
        x2_min,x2_max=x[:,1].min()-1,x[:,1].max()
    
        print(x1_min,x1_max)
        print(x2_min,x2_max)
    
        xx1,xx2=np.meshgrid(np.arange(x1_min,x1_max,resolution),np.arange(x2_min,x2_max,resolution))
    
        #预测结果
        z=classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    
        #画分界线
        z=z.reshape(xx1.shape)
        plt.contourf(xx1, xx2, z, alpha=0.4, cmap=cmap)
        plt.xlim(x1_min, x1_max)
        plt.ylim(xx2.min(), xx2.max())
        for idx, cl in enumerate(np.unique(y)):
            plt.scatter(x=x[y==cl,0],y=x[y==cl,1],alpha=0.0,c=cmap(idx),marker=makers[idx],label=cl)
    
    
        plt.show()
    

    数据来源于比较经典的莺尾花数据。
    数据地址为:
    https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
    打开复制在本地创建csv数据即可。
    大家可以自己跑一下看看效果。这里就不贴效果图了。有什么不明白的地方欢迎留言。

    展开全文
  • 机器学习入门--神经元模型

    千次阅读 2018-05-07 22:52:44
    人工神经元模型我们高中都学习过神经元大概是个什么样子。通常是由一个神经细胞都有树突、轴突、细胞核等等。树突可以接受其他神经元传来的信号,然后对这些信号进行一下处理传递给下一个神经元。在这里我们通过一个...

    人工神经元模型

    我们高中都学习过神经元大概是个什么样子。通常是由一个神经细胞都有树突、轴突、细胞核等等。树突可以接受其他神经元传来的信号,然后对这些信号进行一下处理传递给下一个神经元。

    在这里我们通过一个数学模型来描述一下这个过程。

    在上面这副图里面、…这些带表神经元从前面的神经元所接受到的信号;、…表示权重即表示这个输入对输出有多大的影响,有一个函数f(*)表示神经元对于信号的处理过程;是输出打下一个神经元的信号。除此之外输入之中有一个特殊的=-1。这是为什么呢?我们知道学过神经元只有接收的信号大于一档程度时,神经元才会被激活。在这里就是这个作用,输入的信号不够大时,这个神经元就不会被激活。也有一个权重θ。

    神经元会将输入x和起对应的权重w相乘然后再将其相加得到一个总输入,数学表达式是:


    然后这个值会被当作激活函数f(*)的自变量得到输出yi:

    说到这其实大家对于这个神经元进行的计算过程有了一定的了解了。神经元其实就是一个有着n个变量的方程。给定n个输入,然后神经元给出一个输出。

    现在我们将输入x和权重w用矩阵表示:

     

    那么整个计算过程就可以用一个很简单的方程表示:

    在写成程序的时候,调用库文件写成矩阵进行计算会比使用for循环速度快很多。这样在进行大量计算的时候会省很多时间。

    下面跟大家说说激活函数

    激活函数有很多种,列个表格:

    激活函数的作用是加入非线性因素,来解决神经元在处理分类问题时,分类能力不足的情况;在神经网络之中非线性的激活函数可以让神经网络解决更复杂的任务。

    目前使用最多的激活函数是ReLU函数(y=max(0,x)),比较接近生物上神经元真实的工作状态。

    简单介绍一下线性:

    如果一个方程满足下面这连个条件:

    1, 可加性f(x + y) = f(x)+ f(y)

    2,齐次性(同质性) fx) = αf(x)

    那么我们就可以称这个方程是线性的。实在不懂就暂时把认为这个方程是个直线。

     

    神经元模型的几何解释

     

    首先给大家复习一下点到直线的距离公式:

    设直线 L 的方程为Ax+By+C=0,点 P 的坐标为(),则点 P 到直线 L 的距离为:

                     (百度百科)

    把这里的、当成输入、;A、B当成权重、;c当成θ;这个式子是不是就很像神经元模型?只是激活函数看起来有点难受。

    如果这里把绝对值去掉,那么结果的正负是根据P的所在的位置确定的,在直线L的一边是正另一边就是负。

    因为分母是常数,我们选择忽略它。

    这里大家大概也能看得出来,把输入当作空间中的一点,那么我们前面计算的net值其实就是这个点到空间中一条直线的距离,会根据点所在直线哪一侧而有正负的区别。看张图大家会更明白。

    如果激活函数选择sigmoid函数(表中第三个)图像为

    那么输出可以近似看成根据输入在空间中相对于直线的位置输出1或者0。

     

    神经元模型的一个简单应用

    这是我自己造的数据,以身高为x,头发长度为y我们能得到一个散点图:

    在神经元模型中如果参数设定得好,那么我们就可以得到一条直线把这两种输入分开。这样给定只要给定一个人的身高和头发长度,我们完全可以预测这个人的性别。

    至于确定参数,反向传播算法(BackPropagation)可以帮助我们从已有的数据中找到合适的参数。这里不和大家过多地介绍了,有兴趣的同学可以到网上查一下。

    (参考:http://blog.csdn.net/mao_xiao_feng/article/details/53048213

     

    怎么进行手写数字识别?

    MNIST数据集(不知道的话可以百度一下)中有很多手写数字的图片并且大小都是28*28的,总共有784个像素,把这些图片当作一个784维的空间(线代中向量空间的概念)中的点,输入到一个神经元之中,得到这个图片是不是某个特定的数字(比如是不是8,是8就输出1不是就输出0)。将图片同时输入10个不同的神经元中,我们就能判断这个数字到底是几了。(参数合适准确率能到85%以上)这十个神经元也可以算是组成了一个神经网络。

     

    就说到这吧,有兴趣的话希望同学们在空闲时间自己到网上找一些资料看,同时别忘了一定要把数学学好。


    展开全文
  • 博主对于神经网络的输出神经元个数的问题,起源于“识别手写数字的神经网络为什么需要10个输出而不是四个?”. 实际上,这是两种不同的编码方式,两种的网络架构都是可行的,但是我们选择十个神经元而不是四个...
  • 在上一节,我们通过两个浅显易懂的例子表明,人工智能的根本目标就是在不同的数据集中找到他们的边界,依靠这条边界线,当有新的数据点到来时,只要判断这个点与边界线的相互位置就可以判断新数据点的归属。...
  • 人工神经元模型

    千次阅读 2017-02-08 09:16:58
    输入是由“触突”完成的,触突的前面是上一个神经元的输出——轴突,后面是本神经元的细胞体——神经细胞膜;细胞膜和神经元的轴突是相连的,所以一个神经细胞的输出是个一次性的激发过程——输出一个电脉冲;因此,...
  • Tensorflow单个神经元实现二分类

    千次阅读 2018-09-01 17:44:53
    使用单个神经元对CIFAR-10中的两个分类进行逻辑斯蒂回归,代码如下: import tensorflow as tf import os import numpy as np import pickle # 文件存放目录 CIFAR_DIR = "./cifar-10-batches-py" def...
  • 深度学习-11:神经元、神经网络、人脑和卷积神网络 CSDN专栏: 机器学习&amp;amp;amp;深度学习(理论/实践) 在生物神经网络中,学习源自于大脑中无数神经元之间的连接。大脑接触到新的刺激后,这些神经元之间...
  • AI产品之路:神经元与神经网络

    千次阅读 2017-12-01 00:00:00
    作者:Free 深度学习可以说是目前“人工智能浪潮”火热的一个根本原因,就是因为它的兴起,其中包括深度神经网络、循环神经网络...神经元可以说是深度学习中最基本的单位元素,几乎所有深度学习的网络都是由神经元
  • [DL]单个神经元

    千次阅读 2018-04-22 21:20:51
    一、神经元的拟合原理 一个神经元由以下几个关键知识点组成:激活函数;损失函数;梯度下降。 单个神经元网络模型: 其计算公式: 模型每次的学习都是为了调整w和b,从而得到一个合适的值,最终由这个值配合...
  • 神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术。  本文以一种简单的,循序的...
  • 人工神经网络——神经元模型介绍

    千次阅读 2020-03-08 11:24:08
    目前,深度学习(Deep Learning,简称DL)在算法领域可谓是大红大紫,现在不只是互联网...当然,这里所说的神经网络不是生物学的神经网络,我们将其称之为人工神经网络(Artificial Neural Networks,简称ANN)貌似...
  • 先谈谈个人对神经网络的一些理解。现在很多框架都把神经网络当做黑盒子来用了,其中的很多算法步骤都看不到,用起来总有些心虚。 我们知道一般的神经网络都是长成上图这个样子的,经典的三层:输入层、隐藏层和...
  • 神经元到深度学习

    千次阅读 2016-10-31 14:17:54
    神经网络浅讲:从神经元到深度学习  神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度...
  • CNN神经元覆盖率使用记录

    千次阅读 2018-10-30 17:21:20
    关于神经元覆盖率的概念和使用方式,详情见https://www.52cs.com/archives/2809,当然本文的实验方式有缺陷,...关于CNN的神经元覆盖率,分两部分计算: convolution部分: 卷积部分,在卷积核计算卷积之后,一般会...
  • 深度学习(一)单个神经元

    千次阅读 2018-08-01 23:43:24
    神经网络是由多个神经元组成,一个神经元由以下几个关键知识点组成: 激活函数 损失函数 梯度下降 单个神经元的网络计算公式: \begin{equation}&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;\label{1}z=...
  • 深度学习数学基础(一)之神经元构造

    千次阅读 2020-02-07 10:33:30
    以下有部分公式,如果无法显示,请访问原文链接 过年期间,我抽时间把深度学习的神经网络的数学基础学习了一下,简单的看了看神经网络的基础,在这里我通过写这个系列的博文...从其他多个神经元传递过来的信号,...
  • 理解一个神经网络,它有成千上万的神经元分布在数千个隐藏层中。大多数深层神经网络的互联性和复杂性使其不适合于传统的调试工具。 因此,数据科学家通常依赖可视化技术来帮助他们理解神经网络是如何做出决定的,这...
  • 易懂的神经网络Python实战:单个神经元+随机梯度下降学习逻辑与规则 目录 逻辑与(AND) 破除神经元的认知障碍 实践:用程序表示一个手工设置权重weight和偏置bias的神经元 那么怎么让计算机自己确定神经元的...
  • 来源:中科院神经科学研究院摘要:我们的大脑中存在着亿万个神经元,在神经科学领域有一个非常重要的问题,就是一个神经元是如何在这亿万个神经元中选择与某一些神经元形成突触联系的...
  • 神经网络是一种受生物学启发的编程范式,让计算机...本文以两种常用神经元的工作原理入门,讲解梯度下降学习算法,并进一步引出深度学习的概念。1 感知器(Perceptrons)感知器是人工神经元的一种,即便如今更多的使用
  • 本篇博文主要介绍自适应线性神经元的相关知识,采用理论+代码实践的方式,进行相关的学习。本文首先介绍线性神经元的模型,然后介绍LMS学习规则(最小均方规则),最后通过Python代码实现线性神经元模型,从而给读者...
  • 重磅!神经网络浅讲:从神经元到深度学习

    千次阅读 多人点赞 2017-02-24 10:13:53
    神经网络到深度学习

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,350
精华内容 12,540
关键字:

如何判断神经元