《深度学习入门》学习记录 Part 1

这周主要是学习了《深度学习入门》的前三个章节,了解了NumPy、感知机和神经网络,处理了MNIST (Modified National Institute of Standards and Technology)数据集。

有两个感受:

  1. Python在进行数学运算时,能非常直观的将公式转换成代码,确实很方便、好用。
  2. 神经网络或者人工智能需要比较好的数学基础,要达到「有感觉」确实是需要花时间和精力。

概念

  • 标量(scalar):单一数值
  • 向量(vector):一维数组
  • 矩阵(matrix):二维数组
  • 张量(tensor):多维(三维及以上)数组
  • 函数(function):给定某个输入后返回某个输出的转换器

NumPy

NumPy的数组类numpy.array很好用,让数组的运算变得非常简单。(如果上学时知道了这个那该多好)
NumPy有广播(booadcast)功能,能让不同形状的数组之间进行运算
使用到的一些函数:

  • np.array
  • np.arrange
  • np.sum
  • np.exp(x):e的x次方
  • np.maximum
  • np.minimum
  • np.ndim
  • np.dot
  • np.argmax(x) :数组中最大值的索引

感知机

感知机(perceptron)或朴素感知机是一种算法,能将接收的多个输入信号输出为一个信号,是神经网络的起源算法。

感知机包括「与门」(AND)、「与非门」(Not AND)、「或门」(OR)和「异或门」(XOR),其中「异或门」的需要通过组合「与非门」、「或门」和「与门」来实现,这种叠加了多层的「感知机」也称为「多层感知机」(multi-layered perceptron)

感知机包含「权重」和「偏置」参数,其中「权重」(w)是控制输入信号的重要参数,「偏置」(b)是调整神经元被「激活」(超过阈值)的容易程度的参数。这种以阈值为界的函数为「阶跃函数」。

局限:感知机的权重设定是人工来完成的。

神经网络

神经网络可以简单的理解为多层感知机,是使用了平滑的「激活函数」的多层网络,可以自动的从数据中学习到合适的权重参数。

  • ❓问题:这个自动是如何实现的呢? — 后面章节会介绍到backword,就能体现出自动了,目前学习到的都是forward propagation。

激活函数(activation function)是将输入信号的总和转换为输出信号的函数,能决定如何来激活输入信号的总和。
神经网络与感知机的主要区别就在于「激活函数」:

  • 感知机的激活函数是阶跃函数
  • 神经网络的激活函数是平滑的激活函数,如sigmoid、ReLU、softmax等函数

激活函数包括:

  • 恒等函数(identity function):将输入按原样输出,对输入的信息,不加以任何改动地直接输出。h(x) = x
    • 作用:处理回归问题
    • ❓问题:那这个函数的作用到底是啥?是怎么处理回归问题的呢?—输出的结果是标量(scalar)
  • Sigmoid函数:其输出范围是[0, 1],输入越小,输出接近0;随着输入增大,输出越接近1。即,输入信号为重要信息时,输出较大的值。 h(x) = 1 / (1 + np.exp(-x))
    • 作用:处理二元分类问题
  • ReLU(Rectified Linear Unit)函数:输入大于0时,直接输出该值;在输入小于0时,输出0。h(x) = np.maximum(0, x)
    • 作用:处理二元分类问题
  • softmax函数:输出层的各个神经元都受到所有输入信号的影响,其输出范围是[0, 1],且总和为1,所以可以将softmax函数的输出解释为「概率」。h(x) = np.exp(a) / np.sum(np.exp(a))
    • 作用:处理多元分类问题
    • 指数函数的值很容易变得很大, 注意「溢出」问题,对策是加入某个不会改变运算结果的常数。h(x) = np.exp(a - c) / np.sum(np.exp(a - c)),其中c = np.max(a)
    • ❓问题:神经网络在进行分类时,输出层的softmax函数可以省略,这里的省略是什么意思? (P68)— 这里省略的的重点是在输出层,在中间的隐藏层还是需要用的。

隐藏层的激活函数表示为:h()
输出层的激活函数表示为:σ()

输出层的神经元数量:根据待解决的问题决定,如分类问题一般将其设定为「类别」的数量。

MNIST数据集的处理

机器学习:学习 + 推理

  • 学习:也称为训练,是使用训练数据,自动调整参数的过程。进行模型的学习/训练
  • 推理:用学到的模型对未知的数据进行推理(如分类)

MNIST的数据处理步骤分为三步,在完成后有一个精度评价:
1. 数据预处理: get_data()中的normalize,将图像的像素值除以255,使得数据的值在0.0~1.0。
2. 学习:init_network(),其中使用到了已训练好的*.pkl模型
3. 推理:predict(network, x)
4. 评价:识别精度

其中:

  • 输入层:图像大小28 * 28 = 784个神经元
  • 输出层:[0, 9]共10个类别的10个神经元
  • 两个隐藏层:50个神经元和100个神经元
    • ❓问题:书中(P73)说这个50和100可以设置成任何值,那如何设置这个隐藏层呢? — 在init_network中,使用了sample_weight.pkl,这里设置了隐藏层的神经元数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值