菜单

入门神经网络

2018年12月13日 - bway883必威官网

产同样篇传送门

英文原稿,尽管为是自己写的
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地图