【读书笔记】深度学习入门(一)

感知机

感知机是接受多个输入信号,并转换为一个输出信号的东西。输入信号输入神经元,乘以相应的权重,并计算总和,总和超过某一个界限值时,才会输出1,也被称为神经元激活。

局限性:

感知机的局限性在于它只能表示一条直线分割的线性空间,可以通过叠加层实现非线性空间。理论上多层感知机可以实现计算机的功能。

神经网络

神经网络可以自动地从数据中学习到合适地权重参数。

激活函数

将输入信号的总和转换为输出信号。神经网络中常用的激活函数为阶跃函数,sigmoid函数和ReLU函数。

激活函数必须使用非线性函数,因为线性函数无论怎样加深层数,总是有与之等效的“无隐藏层的神经网络”

阶跃函数

输入超过0,输出1,否则输出0.

具体实现

# 阶跃函数
def step_function (x):
	y = x > 0
	return y.astype(np.int)

sigmoid函数

>h(x) = 1 / ( 1 + exp(-x) )
函数图像

sigmoid函数图像是一条平滑的曲线,输出随着输入发生连续性变化,且可以输出实数值。

请添加图片描述

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

ReLU函数

在输入大于0时,直接输出该值,否则输出0

# relu函数
def relu(x):
	return np.maximum(0, x)

输出层的激活函数

一般的,根据求解问题的性质,回归问题可以使用恒等函数,二元分类问题可以使用sigmoid函数,多元分类问题可以使用softmax函数。

>**这里需要一个数学公式,但是我还没学会怎么在csdn上写数学公式,先标记一下,后面我再整理**

# softmax函数
def softmax(a):
	c = np.max(a)
	exp_a = np.exp(a - c)
	sum_exp_a = np.sum(exp_a)
	y = exp_a / sum_exp_a
	return y

softmax输出是0.0到1.0之间的实数,并且softmax输出值总和是1。这样计算有可能会出现溢出的错误,可以通过加常数放出出现此错误。

神经网络的自主学习

神经网络的特征就是可以根据数据自动确定权重参数

损失函数

损失函数是神经网络性能恶劣程度的指标,可以使用任意函数,一般使用均方误差和交叉熵误差。

为什么使用损失函数

在神经网络的学习中,如果以识别精度为指标,则参数的导数在绝大多数地方为0,因为微调权重等参数改变的识别精度变化不连续,而以损失函数为指标,则会发生连续性变化。同理,阶跃函数不能作为神经网络的激活函数,而sigmoid不仅连续,而且导数在任何地方都不为0.

均方误差

在这里插入图片描述

交叉熵误差

tk中只有正确解标签索引为1,其他均为0

python实现

def cross_entropy_error(y, t):
	delta = 1e-7 #防止出现log(0)
	return -np.sum(t * np.log(y + delta))

梯度

由全部向量的偏导数汇总成的向量,梯度指示的方向是各点函数值减小最多的方向。

#梯度的python实现
def numerical_gradient(f, x):
	h = 1e-4
	grad = np.zeros_like(x) #生成与x形状相同的数组
	for idx in range(x.size) :
		tmp_val = x[idx]
		x[idx] = tmp_val + h
		fxh1 = f(x)
		x[idx] = tmp_val - h
		fxh2 = f(x)
		grad[idx] = (fxh1 - fxh2) / (2 * h)
		x[idx] = tmp_val
	return grad 

梯度法

从当前位置沿着梯度方向前进一定距离,然后在新的地方重新求梯度,再沿着梯度方向前进,逐渐减小函数值。
负梯度:梯度法中变量更新的方向
梯度会指向各点处函数值减小最多的方向

在这里插入图片描述

η为学习率,决定在多大程度上更新参数,实现反复学习决定。

def gradient_descent(f, init_x, lr = 0.01, step_num = 100):
	x = init_x
	for i in range(step_num) :
		grad = numerical_gradient(f, x)
		x -= lr * grad
	return x

神经网络学习的四个步骤

  1. mini-batch:从训练数据中随机选出一部分数值
  2. 计算梯度,为了减少mini-batch的损失函数的值,需要求出多个权重参数的梯度,梯度表示损失函数的值减小最多的方向
  3. 更新参数:将权重参数沿梯度方向进行微小的更新
  4. 重复1,2,3

以上的方法因为是随机选择mini-batch数据,所以又称为随机梯度下降法(SGD),这个方法优点是实现简单,同时可以作为后文的误差反向传播的梯度确认判断误差反向传播求出的梯度是否正确,但是计算上比较费时间。

epoch:学习中所有训练数据均被使用过一次时的更新次数,每经过一个epoch,就对所有的训练数据和测试数据计算识别精度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值