大脑神经元网络算法原理会执行反向迭代算法吗

机器学习(神经网络)
1.1以人脑中的神经网络为启发,历史上出现过很多不同的版本
1.2最著名的算法是1980年的backpropagation
2.多层向前神经网络
2.1backpropagation被使用在多层向前神经网络上
2.2多层向前神经网络由以下部分组成:
输入层、隐藏层、输出层
2.3每层由单元组成
2.4输入层是由训练集的实例特征向量传入
2.5经过连接节点的权重传入下一层,一层的输出是下一层的输入
2.6隐藏层的个数可以是任意的,输入层有一层,输出层有一层
2.7每个单元也可以被称作神经节点,根据生物学来源定义
2.8一层中加权的求和,然后根据非线性方程转化输出
2.9作为多层先前神经网络,理论上,如果有足够多的隐藏层和足够大的训练集,可以模拟出任何方程
3.设计神经网络结构
3.1使用神经网络训练数据之前,必须确定神经网络的层数,以及每层单元的个数
3.2特征向量在被传入输入层时通常先被标准化到0-1之间(为了加速学习过程)
3.3离散型变量可以被编码成每一个输入单元对应一个特征值可能赋的值
3.4神经网络既可以用来做分类问题,也可以解决回归问题
4.backpropagation算法
4.1通过迭代性来处理训练集中的实例
4.2对比经过神经网络后输入层预测值与真实值之间
4.3反方向(从输出层=&隐藏层=&输入层),以最小误差来更新每个连接的权重
5.算法详细介绍
输入:D:数据集,l:学习率,一个多层向前神经网络
输出:一个训练好的神经网络
5.1初始化权重和偏向:随机初始化在-1到1之间,或者-0.5到0.5之间,每个单元有一个偏向
5.2对于每一个训练实例x执行以下步骤:
5.2.1:由输入层向前传送
5.2.2:根据误差反向传送
5.3终止条件
(1)权重的更新低于某个阈值
(2)预测的错误率低于某个阈值
(3)达到一定的循环次数
import numpy as np
import numpy as np
def tanh(x):
return np.tanh(x)
def tanh_deriv(x):
return 1.0-np.tanh(x)*np.tanh(x)
def logistic(x):
return 1.0/(1+np.exp(-x))
def logistic_derivative(x):
return logistic(x)*(1-logistic(x))
class NeuralNetwork:
def __init__(self,layers,activation='tanh'):
if activation == 'logistic':
self.activation = logistic
self.activation_deriv = logistic_derivative
elif activation == 'tanh':
self.activation = tanh
self.activation_deriv = tanh_deriv
self.weights = []
for i in range(1,len(layers)-1):
self.weights.append((2*np.random.random((layers[i-1]+1,layers[i]+1))-1)*0.25)
self.weights.append((2*np.random.random((layers[i]+1,layers[i+1]))-1)*0.25)
def fit(self,x,y,learning_rate=0.2,epochs=10000):
x = np.atleast_2d(x)
temp = np.ones([x.shape[0],x.shape[1]+1])
temp[:,0:-1] = x
y = np.array(y)
for k in range(epochs):
i = np.random.randint(x.shape[0])
a = [x[i]]
for l in range(len(self.weights)):
a.append(self.activation(np.dot(a[l],self.weights[l])))
error = y[i]-a[-1]
deltas = [error*self.activation_deriv(a[-1])]
for l in range(len(a)-2,0,-1):
deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l]))
deltas.reverse()
for i in range(len(self.weights)):
layer = np.atleast_2d(a[i])
delta = np.atleast_2d(deltas[i])
self.weights[i] += learning_rate*layer.T.dot(delta)
def predict(self,x):
x = np.array(x)
temp = np.ones(x.shape[0]+1)
temp[0:-1] = x
for l in range(0,len(self.weights)):
a = self.activation(np.dot(a,self.weights[l]))
nn = NeuralNetwork([2,2,1],'tanh')
x = np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([0,1,1,0])
nn.fit(x, y)
for i in [[0,0],[0,1],[1,0],[1,1]]:
print(i,nn.predict(i))
运行结果:
[0, 0] [ 0.0002198]
[0, 1] [ 0.]
[1, 0] [ 0.9983378]
[1, 1] [ 0.]
练习2(手写数字图像识别):
数据集展示:
from sklearn.datasets import load_digits
digits = load_digits()
print(digits.data.shape)
import pylab as pl
pl.matshow(digits.images[0])
运行结果:
(1797, 64)
运行效果:
代码实现:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.metrics import confusion_matrix,classification_report
from sklearn.preprocessing import LabelBinarizer
from sklearn.cross_validation import train_test_split
def tanh(x):
return np.tanh(x)
def tanh_deriv(x):
return 1.0-np.tanh(x)*np.tanh(x)
def logistic(x):
return 1.0/(1+np.exp(-x))
def logistic_derivative(x):
return logistic(x)*(1-logistic(x))
class NeuralNetwork:
def __init__(self,layers,activation='tanh'):
if activation == 'logistic':
self.activation = logistic
self.activation_deriv = logistic_derivative
elif activation == 'tanh':
self.activation = tanh
self.activation_deriv = tanh_deriv
self.weights = []
for i in range(1,len(layers)-1):
self.weights.append((2*np.random.random((layers[i-1]+1,layers[i]+1))-1)*0.25)
self.weights.append((2*np.random.random((layers[i]+1,layers[i+1]))-1)*0.25)
def fit(self,x,y,learning_rate=0.2,epochs=10000):
x = np.atleast_2d(x)
temp = np.ones([x.shape[0],x.shape[1]+1])
temp[:,0:-1] = x
y = np.array(y)
for k in range(epochs):
i = np.random.randint(x.shape[0])
a = [x[i]]
for l in range(len(self.weights)):
a.append(self.activation(np.dot(a[l],self.weights[l])))
error = y[i]-a[-1]
deltas = [error*self.activation_deriv(a[-1])]
for l in range(len(a)-2,0,-1):
deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_deriv(a[l]))
deltas.reverse()
for i in range(len(self.weights)):
layer = np.atleast_2d(a[i])
delta = np.atleast_2d(deltas[i])
self.weights[i] += learning_rate*layer.T.dot(delta)
def predict(self,x):
x = np.array(x)
temp = np.ones(x.shape[0]+1)
temp[0:-1] = x
for l in range(0,len(self.weights)):
a = self.activation(np.dot(a,self.weights[l]))
digits = load_digits()
x = digits.data
y = digits.target
x -= x.min()
x /= x.max()
nn = NeuralNetwork([64,100,10],'logistic')
x_train,x_test,y_train,y_test = train_test_split(x,y)
labels_train = LabelBinarizer().fit_transform(y_train)
labels_test =
LabelBinarizer().fit_transform(y_test)
print("start fitting")
nn.fit(x_train,labels_train,epochs=3000)
predictions = []
for i in range(x_test.shape[0]):
o = nn.predict(x_test[i])
predictions.append(np.argmax(o))
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))
运行结果:
D:\Anaconda3\lib\site-packages\sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
"This module will be removed in 0.20.", DeprecationWarning)
start fitting
avg / total
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!前沿 | 反向工程破解大脑算法,让机器像人类一样学习
来自THE TARTEN、CMU
机器之心编译出品
参与:吴攀
卡耐基梅隆大学的Sandra Kuhlman使用荧光成像技术获得的神经网络图像,其中可以看到单个大脑神经元细胞。
CMU团队使用荧光成像技术标记出的单个神经元
为了提高效率以及对自身的理解,我们人类在开发更强大的计算机和打造自动化世界上进行了很大的投入。尽管现在计算机已经可以毫不停顿地高速执行大量计算,但和自然界中的生物计算机(大脑)比起来,仍旧还是望尘莫及。但人类从未停止过对大自然般造化之力的追求,卡内基梅隆大学(CMU)正在进行的一项计算机科学研究有望加深我们对生物的理解,并以此促进类大脑算法的开发。
卡内基梅隆大学计算机科学系和认知神经基础中心(CNBC,卡耐基梅隆大学与匹兹堡大学之间的一个合作研究项目)教授Tai-Sing Lee领头的研究项目将会尝试使用反向工程研究大脑,并希望能够以此揭示大脑的学习算法,将其应用于推进机器学习算法。按照计划,这一研究项目将持续五年,共耗资约1200万美元。这些资金来自于高级情报研究计划署(IARPA)大脑皮层网络机器智能(MICrONS)计划;该项目正在帮助推动美国总统奥巴马的脑计划(BRAIN Initiative)彻底刷新我们对人类大脑的理解。
Lee说:「MICrONS在设计和范围上与首次测绘排序人类基因的人类基因组计划(Human Genome Project)相似。它很有可能将具有长期的影响并有望彻底改变神经科学和人工智能。」
除了生物学家在努力揭示大脑的秘密之外,计算机科学家也一直在忙于改进机器学习,并在近几十年内取得了显著的进步。
机器学习的主要目标是使用计算机破译数据中的模式并生成模型,然后再使用该模型来预测新数据;与此同时,模型还会与新数据共同进化使之变得更为稳健。机器学习算法为近年来的许多进步做出了贡献,包括基因组分析、大规模大数据应用和自动驾驶汽车。
新技术的发展让收集关于大脑活动的海量数据成为可能,更重要的是,新技术让我们可以对这些数据进行分析并得出重要的结论。Lee领导的项目的一个主要目标是创建一个代表神经回路的大型数据库。为了实现这一目标,Lee所领导的团队将与另一支Wyss生物启发工程研究所(Wyss Institute for Biologically Inspired Engineering)的MICrONS团队建立合作,该团队的领头人是哈佛医学院遗传学教授George Church,目前正与来自冷泉港实验室、麻省理工学院和哥伦比亚大学的研究者合作开发用于重建卡耐基梅隆大学所记录的全部神经元回路的革命性技术。这个数据库与另外两个其它MICrONS团队贡献的数据库的规模将是前所未有的;建成后还将开放给世界上其它地方的研究者用于研究。而Lee也将和卡耐基梅隆与CNBC生物科学助理教授Sandra Kuhlman、约翰霍普金斯大学与彭博公司的特聘认知科学教授Alan Yuille对其中的数据进行分析。
在这个MICrONS项目中,相关研究人员除了可以提高对大脑计算原理的认识,还能使用这些大型数据库评估一些计算和学习模型,并利用反向工程处理这些数据以打造更好的计算机学习和模式识别算法。
而目前已经在机器学习中得到应用的技术是神经网络:其中的算法基于类似动物神经元的可互相分享数据并作出计算的简单计算单元。神经网络在1990年代达到过一次研究顶峰,近年来随着计算机算力与数据集的增长,研究热度又再次回升。并在一些不同的领域产出了一些有趣的应用,包括面部识别、语音和手写文字识别、自动驾驶汽车的自动决策、自动交易和预防金融诈骗等。
Lee说:「但今天的神经网络实质上使用的是1980年代初期开发的算法。它们是很强大,但它们仍然无法达到人脑算法那样的高效和强大。比如说学习识别一个物体,计算机可能首先需要成千上万张带有标签的样本,还需要进行监督式的教导才行;而人类则只需少量样本且可能不需要监督。」
人工神经网络的信息处理是单向的:从输入节点到输出节点。而大脑的工作方式则很不相同。人类大脑由许多神经元构成,这些小单元可以通过巨大的电脉冲网络互相发送信息,这些信息调控了所有大脑所控制的身体功能,包括理解场景和肢体运动等。通过最近的研究数据可以发现,大脑中的神经元是高度互连的,每一步处理过程都可能产生反馈。尽管近几十年来生物学家已经在相关研究上取得了丰硕的成果,但到目前为止,科学家还并没有完全理解神经元的工作机制。而一旦理解其中的机制,我们可能就将有能力打造出更有能力且更近似于人脑的神经网络。
为了更好地理解生物神经网络和它们的反馈回路,Kuhlman将使用一种被称为「双光子钙成像显微镜(2-photon calcium imaging microscopy)」的技术来记录上万个小鼠神经元处理视觉信息时所产生的信号。记录下的数据将用于帮助打造一个互连神经元模型。她指出,几年前这样的成果还无法实现,因为当时的观测精度有限,几个在一起的神经元会被同时观测到,而且单次实验时也只能观测到几个或十几个神经元。
「通过将分子传感器与光学方法的复杂组合整合起来检测神经活动,现在就算不能监控全部神经元,也有可能可以实时追踪一个大脑区域内神经元的大部分神经动态。」Kuhlman说,「因此我们可以得到一个巨大的数据集,帮助我们详细认识视觉皮层某个区域中神经元的行为。」
科学家认为如果我们能以某种方式了解大脑,那么我们就能知道如何复制它,而我们的机器也将有能力靠自己学习。(一个项目同时实现这两个目标非常符合卡内基梅隆大学的跨学科文化。)
研究人员希望使用这个大规模数据集解开神经网络的复杂难题。他们的目标是将获得的新知识应用到机器学习算法上,使他们可以使用少得多的样本就能开发出模型。这对未来具有重要的意义。Lee说:「希望这些知识可用以促进新一代机器学习算法的开发,使人工智能机器可以在不需要监督的坏境下通过少量样本进行学习,而这正是人类智能的标志。」
「从这些大规模数据中提取大脑学习和推理的秘密算法以推动机器学习的发展是颇具野心的,可能是这个项目中最不能明确的一部分。」卡耐基梅隆大学计算机科学学院院长Andrew Moore说,「这就相当于登月计划,但卡耐基梅隆是做这件事最好的地方,因为我们在人工智能方面有非常强大的传统和社区。我们还有一个与认知神经基础中心和大学的BrainHub计划有合作的强大的理论和实验神经科学家社区。」(BrainHub是一个神经科学研究倡议,该倡议的目的是将大学的生物学、计算机科学、心理学、统计学与工程学结合起来研究理解大脑的结构和行为如何产生复杂行为。)
纽约大学数据科学中心主任Yann LeCun在卡内基梅隆大学的一场新闻发布会上对此评论说:「人工智能在不断进步中从失败走向失败,但这次可能又是一次飞跃。」
(C)本文由机器之心原创编译,机器之心系今日头条签约作者,本文首发头条号,转载请联系本公众号获得授权。
?------------------------------------------------
加入机器之心(全职记者/实习生):
投稿或寻求报道:
广告&商务合作:
机器之心是Comet Labs旗下的前沿科技媒体。Comet Labs是由联想之星发起、独立运作的全球人工智能和智能机器加速投资平台,携手全球领先的产业公司和投资机构,帮助创业者解决产业对接、用户拓展、全球市场、技术整合、资金等关键问题。旗下业务还包括:Comet旧金山加速器、Comet北京加速器、Comet垂直行业加速器。
↓↓↓点击「阅读原文」查看机器之心网站,获取更多精彩内容。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
未来从这里发声
未来从这里发声
今日搜狐热点神经网络算法的优势与应用
人工神经网络(ANN)以大脑处理机制作为基础,开发用于建立复杂模式和预测问题的算法。
首先了解大脑如何处理信息:
在大脑中,有数亿个神经元细胞,以电信号的形式处理信息。外部信息或者刺激被神经元的树突接收,在神经元细胞体中处理,转化成输出并通过轴突,传递到下一个神经元。下一个神经元可以选择接受它或拒绝它,这取决于信号的强度。
现在,让我们尝试了解 ANN 如何工作:
这里,$w_1$,$w_2$,$w_3$ 给出输入信号的强度
从上面可以看出,ANN 是一个非常简单的表示大脑神经元如何工作的结构。
为了使事情变得更清晰,用一个简单的例子来理解 ANN:一家银行想评估是否批准贷款申请给客户,所以,它想预测一个客户是否有可能违约贷款。它有如下数据:
所以,必须预测列 X。更接近 1 的预测值表明客户更可能违约。
基于如下例子的神经元结构,尝试创建人造神经网络结构:
通常,上述示例中的简单 ANN 结构可以是:
与结构有关的要点:
1.网络架构有一个输入层,隐藏层(1 个以上)和输出层。由于多层结构,它也被称为 MLP(多层感知机)。
2.隐藏层可以被看作是一个「提炼层」,它从输入中提炼一些重要的模式,并将其传递到下一层。通过从省略冗余信息的输入中识别重要的信息,使网络更快速和高效。
3.激活函数有两个明显的目的:
它捕获输入之间的非线性关系
它有助于将输入转换为更有用的输出。
在上面的例子中,所用的激活函数是 sigmoid:
$$O_1=1+e^{-F}$$
其中$F=W_1*X_1+W_2*X_2+W_3*X_3$
Sigmoid 激活函数创建一个在 0 和 1 之间的输出。还有其他激活函数,如:Tanh、softmax 和 RELU。
4.类似地,隐藏层导致输出层的最终预测:
$$O_3=1+e^{-F_1}$$
其中$F_1=W_7*H_1+W_8*H_2$
这里,输出值($O_3$)在 0 和 1 之间。接近 1(例如0.75)的值表示有较高的客户违约迹象。
5.权重 W 与输入有重要关联。如果 $w_1$ 是 0.56,$w_2$ 是 0.92,那么在预测 $H_1$ 时,$X_2$:Debt Ratio 比 $X_1$:Age 更重要。
6.上述网络架构称为「前馈网络」,可以看到输入信号只在一个方向传递(从输入到输出)。可以创建在两个方向上传递信号的「反馈网络」。
7.一个高精度的模型给出了非常接近实际值的预测。因此,在上表中,列 X 值应该非常接近于列 W 值。预测误差是列 W 和列 X 之差:
1.获得一个准确预测的好模型的关键是找到预测误差最小的「权重 W 的最优值」。这被称为「反向传播算法」,这使 ANN 成为一种学习算法,因为通过从错误中学习,模型得到改进。
2.反向传播的最常见方法称为「梯度下降」,其中使用了迭代 W 不同的值,并对预测误差进行了评估。因此,为了得到最优的 W 值,W 值在小范围变化,并且评估预测误差的影响。最后,W 的这些值被选为最优的,随着W的进一步变化,误差不会进一步降低。要更详细地理解解梯度下降,请参考: http://www.kdnuggets.com/2017/04/simple-understand-gradient-descent-algorithm.html
神经网络的主要优点:
ANN 有一些关键优势,使它们最适合某些问题和情况:
ANN 有能力学习和构建非线性的复杂关系的模型,这非常重要,因为在现实生活中,许多输入和输出之间的关系是非线性的、复杂的。
ANN 可以推广,在从初始化输入及其关系学习之后,它也可以推断出从未知数据之间的未知关系,从而使得模型能够推广并且预测未知数据。
与许多其他预测技术不同,ANN 不会对输入变量施加任何限制(例如:如何分布)。此外,许多研究表明,ANN 可以更好地模拟异方差性,即具有高波动性和不稳定方差的数据,因为它具有学习数据中隐藏关系的能力,而不在数据中强加任何固定关系。这在数据波动非常大的金融时间序列预测(例如:股票价格)中非常有用。
1.图像处理和字符识别:ANN 具有接收许多输入的能力,可以处理它们来推断隐蔽、复杂的非线性关系,ANN在图像和字符识别中起着重要的作用。手写字符识别在欺诈检测(例如:银行欺诈)甚至国家安全评估中有很多应用。图像识别是一个不断发展的领域,广泛应用于社交媒体中的面部识别,医学上的癌症治疗的停滞以及农业和国防用途的卫星图像处理。目前,ANN 的研究为深层神经网络铺平了道路,是「深度学习」的基础,现已在计算机视觉、语音识别、自然语言处理等方向开创了一系列令人激动的创新,比如,无人驾驶汽车。
2.预测:在经济和货币政策、金融和股票市场、日常业务决策(如:销售,产品之间的财务分配,产能利用率),广义上都需要进行预测。更常见的是,预测问题是复杂的,例如,预测股价是一个复杂的问题,有许多潜在因素(一些已知的,一些未知的)。在考虑到这些复杂的非线性关系方面,传统的预测模型出现了局限性。鉴于其能够建模和提取未知的特征和关系,以正确的方式应用的 ANN,可以提供强大的替代方案。此外,与这些传统模型不同,ANN 不对输入和残差分布施加任何限制。更多的研究正在进行中,例如,使用 LSTM 和 RNN 预测的研究进展。
ANN 是具有广泛应用的强大的模型。以上列举了几个突出的例子,但它们在医药、安全、银行、金融、政府、农业和国防等领域有着广泛的应用。
To learn ANNs in more detail, register for the 8 week Data science course on www.deeplearningtrack.com - next batch starting soon
更多课程和文章尽在微信号:
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点【图文】神经网络预测法_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
神经网络预测法
阅读已结束,下载本文到电脑
想免费下载本文?
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢}

我要回帖

更多关于 r神经元网络算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信