引言node
深度学习背后的主要原理是从大脑中汲取灵感。,这种观点产生了“神经网络”术语,大脑包含数十亿个神经元,它们之间有数万个链接。 在许多状况下,深度学习算法相似于大脑,由于大脑和深度学习模型都涉及大量的计算单元(神经元),这些单元在未激活时并非活跃的,它们彼此交互时会变得智能化。python
神经元算法
神经网络的基本构建模块是人工神经元--模仿人类大脑神经元。 这些是强大的计算单元,具备加权输入信号并使用激活功能产生输出信号。 这些神经元分布在神经网络的几个层中。网络
什么网络是如何工做的?函数
深度学习由人工神经网络组成,这些网络以人脑中存在的相似网络为模型。 当数据经过这我的工网格时,每一个层处理数据的一个方面,过滤异常值,找到合适的实体,并产生最终输出。学习
神经元的权重优化
权重是指两个神经元之间链接的强度或幅度,若是您熟悉线性回归,则能够比较输入的权重,例如咱们在回归方程中使用的系数。权重一般被初始化为较小的随机值,例如 在0到1之间。spa
前馈深度网络3d
前馈监督神经网络是第一个也是最成功的学习算法。 它们也被称为深度网络,多层感知器(MLP)或简单的神经网络,而且显示出了具备单个隐藏层的链接体系结构。 code
网络处理输入变量,并向后传递,激活神经元,最终产生输出值。这被称为网络上的前向传递。
激活函数
激活函数是加权输入与神经元输出的加和的映射。 它被称为激活或者传递函数,由于它控制激活神经元的初始值和输出信号的强度。
表达式:
经常使用的有:
反向传播
将网络的预测值与预期输出进行比较,并使用函数计算偏差, 而后,该错误在整个网络内传播回来,一次一层,并根据它们对错误的贡献值更新权重。 这个聪明的数学运算称为反向传播算法。 对训练数据中的全部示例重复该过程。 为整个训练数据集更新网络的一轮称为纪元。 能够训练网络数十,数百或数千个时期。
成本函数和梯度降低
成本函数是神经网络对其给定的训练输入和预期输出所作的“有多好”的度量。 它还可能取决于权重和误差等属性。
成本函数是单值的,而不是向量,由于它评估神经网络做为一个总体执行得有多好。 使用梯度降低优化算法,在每一个时期以后递增地更新权重。
成本函数:
经过在成本梯度的相反方向上采起步骤来计算权重更新的大小和方向。
其中Δw是包含每一个权重系数w的权重更新的向量,其计算以下:
咱们计算梯度降低直到导数达到最小偏差,而且每一个步骤由斜率(梯度)的陡度肯定。
多层感知器(前向传播)
这类网络由多层神经元组成,一般之前馈方式互连(向前移动)。一层中的每一个神经元具备与后续层的神经元的直接链接。在许多应用中,这些网络的单元应用sigmoid或ReLU做为激活功能。
如今考虑一个问题,找出交易数量,给定账户和家庭成员做为输入。
首先要解决这个问题,咱们须要从建立前向传播神经网络开始。咱们的输入图层将是家庭成员和账户的数量,隐藏图层的数量是一个,输出图层将是交易数量。
给定权重,如图所示,从输入层到隐藏层,其中家庭成员2的数量和帐户数量3做为输入。
如今,将经过如下步骤使用前向传播来计算隐藏层(i,j)和输出层(k)的值。
处理过程
$i$的值将根据输入值和与所链接的神经元相对应的权重来计算。
$i = (2 * 1) + (3 * 1)$
→ i = 5
相似的,
$j = (2 * -1) + (3 * 1)$
→ j = 1
$K = (5 * 2) + (1 * -1)$
→ k = 9
python 实现
为了使神经网络达到最大预测能力,咱们须要为隐藏层应用激活函数。它用于捕获非线性。 咱们将它们应用于输入层,隐藏层以及值上的某些方程式。
这里咱们使用ReLU激活函数。
import numpy as np def relu(input): # Rectified Linear Activation output = max(input, 0) return(output) print("Enter the two values for input layers") a = int(input()) b = int(input()) input_data = np.array([a, b]) weights = { 'node_0': np.array([1, 1]), 'node_1': np.array([-1, 1]), 'output_node': np.array([2, -1]) } node_0_input = (input_data * weights['node_0']).sum() node_0_output = relu(node_0_input) node_1_input = (input_data * weights['node_1']).sum() node_1_output = relu(node_1_input) hidden_layer_outputs = np.array([node_0_output, node_1_output]) model_output = (hidden_layer_outputs * weights['output_node']).sum() print(model_output)
输出:
Enter the two values for input layers 2 3 9