菜单

前馈

2018年12月17日 - 生物科技

生一致首传送门

英文原文,尽管也是自己写的
Chinglish,可是以事先以加拿大某有些村校上学导致中文术语或者汇合发挥不准。

著作和代码都于这儿,用来骗 欢迎Star GitHub
repo

备工作

朗诵懂就首小说,需要而发以下地点的知

假若来下列知识就还好了

爆发此外没有看懂的有些,欢迎留言,信不信教我一半刻钟外秒回。

生物科技,一个巨简单的神经网络(A Deadly Simple NN)

要您对神经网络(neural
network)
感谢兴趣或关注了有关的章,这下图被的这一个模型或你免相会深感分外生疏。

一个人工神经网络模型

但是此可能对此新家有硌不顶好?这看上边那简化版的

一个无隐层的神经网络

祈求里的这么些东西,大家一个一个底捋一方方面面。每个粉红色的圆代表一个神经元(neuron)。每个方块代表一个运算,比如
+ 代表求和。上图备受最为左边的老三单神经元组成了输入层(input
layer)
,包含一个 h 的神经细胞组成了输出层(output
layer)
,并且登时无异于重叠只有这一个神经元。

出口层神经元的输入值

对于生物学意义及之神经细胞来说,日常在一个阈值(threshold)来假若其达到提神之状态,也便是受激活。在我们所讨论的神经网络中,我们的神经细胞将会见经过输入值和激活函数(activation
function)
计一个输出值。激活函数最值得表扬的少数就是她可以是外类型的函数,包括可未杀跃阶函数,多项式函数或者
sigmoid 函数。h 是出口神经元的输入值,结合激活函数,输出神经元会输出
f(h) 总计的结果 y,也尽管是成套神经网络的输出值。

倘你挑 f(h) = h
作为你的激活函数,那么您的神经网络输出结果以会面是下图被之这公式,这里
y = f(h)

神经网络的输出

假如你当这看起是一个线性回归的型,那就是本着了。假若您的激活函数是连续可导的,那么(平日境况下)你就得接纳一个给做
梯度下降(gradient descent)
的道来磨炼而的大网。不过这清楚起来而稍稍麻烦一点,在我们深入到锻练的步子往日,我们事先来编排一个坏简单的先后来打探神经网络作出预测的经过。大家拿拔取sigmoid 函数作为激活函数, Python
作为编程语言。预测的是进程是平栽前馈(feedforward)的乘除,仅仅有这等同片的神经网络是不克上之(例如,通过反向传播(backpropagation)),但咱稍后又关注操练上的片段。

Sigmoid 函数

import numpy as np

def sigmoid(x):
    # sigmoid function
    return 1/(1 + np.exp(-x))

inputs = np.array([0.7, -0.3])
weights = np.array([0.1, 0.8])
bias = -0.1

# calculate the output
output = sigmoid(np.dot(weights, inputs) + bias)

print('Output:')
print(output)

代码和这吧

先是个单隐层神经网络(Your First 2-Layer NN)

注:单隐层,即为统揽一个隐层,一个输出层的神经网络,输入层和输出层因为是必须的,所以未计数。

今昔公早就主导驾驭了一个神经网络是怎么算预测结果的。在现实生活中,大家面临的估摸问题频相当复杂,这样简单的纱布局或远远不够。这里大家倘使引入一个新的概念,隐层(hidden
layer)

一个兼有三单输入层神经元,两单隐层神经元和一个出口层神经元的神经网络

以率先组成部分可怜简单的网型中,我们的权重(weight)大凡一个向量。不过对于大部分神经网络来说,其实权重将会合是一个之类图一律的矩阵。

老八只输入层神经元和少数只隐层神经元的权重矩阵

结第一片的知道和地点单隐层神经网的型,你可能就精通怎么通过者模型总计
h1 的切实可行数值了。我们深受来一个简易的公式定义

算算隐层神经元输入值的公式

对此大家所关注的此单隐层模型来说,它是脚这样的

算算隐层输入值的矩阵乘法

注意!!:上图被之权重下角标已经变更为矩阵的表明形式,并无是与单隐层神经网络图被的下角标所对应的。因为以矩阵的表达方法中,是用行/列的逐一来标注的。所以要因而示意图中的方标明的话,会促成一些误解。

故此先前神经网络模型图备受的下角标所标注的矩阵

纪事,上图备受之之算过程使用的不用是矩阵使用的角标,但以此跟我们地方单隐层神经网络的示意图中之标号是均等的。

结缘地点所法的学识,大家好很快构建一个单隐层神经网络的前馈(即预测)过程了。我们仍旧使用
sigmoid 函数作为大家的激活函数(并且以之后大充足日子还晤面为此这么些函数)。

亟需办事项:

import numpy as np

def sigmoid(x):
    # sigmoid function
    return 1/(1+np.exp(-x))

# 神经网络各层神经元数量
N_input = 3
N_hidden = 2
N_output = 1

np.random.seed(42)
# Make some fake data
X = np.random.randn(4)

# 生成输入层到隐层/隐层到输出层权重
weights_in_hidden = np.random.normal(0, scale=0.1, size=(N_input, N_hidden))
weights_hidden_out = np.random.normal(0, scale=0.1, size=(N_hidden, N_output))

# 计算隐层的输入值/输出值
hidden_layer_in = np.dot(X, weights_in_hidden)
hidden_layer_out = sigmoid(hidden_layer_in)

print('Hidden-layer Output:')
print(hidden_layer_out)

# 计算输出层的输入值/输出值
output_layer_in = np.dot(hidden_layer_out, weights_hidden_out)
output_layer_out = sigmoid(output_layer_in)

print('Output-layer Output:')
print(output_layer_out)

代码在此时

参考资料

Thanks for reading. If you find any mistake/typo in this blog, please
don’t hesitate to let me know, you can reach me by email:
jyang7[at]ualberta.ca

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图