[学习笔记] Neuron Networks and Deep Learning

本文是基于Michael Nielsen的《Neural networks and Deep learning》的学习笔记,探讨如何使用神经网络识别手写数字。介绍了Perceptrons、Sigmoid Perceptrons、神经网络结构以及梯度下降法。并以识别手写数字为例,阐述了神经网络的工作原理和训练过程。
摘要由CSDN通过智能技术生成

前言

   文章内容是基于Micheal Nielsen在 http://neuralnetworksanddeeplearning.com 上提供教程《Neural networks and Deep learning》进行的个人学习理解。方便自己温故而知新,加深理解。
  课程开头,Nielsen说明了他写书目的以及对学习者的一些建议,个人的简要理解如下:
1、《Neural networks and Deep learning》讲解了仿生神经网络的结构,数学表达,以及基于此类结构发展出来的深度学习算法。
2、学习此书,求精不求多,修炼内功(数学原理)以及基本的招式(Python数学工具),以能够融会贯通为主要目的。
  鉴于Nielsen的建议,作者计划对此书进行精读之后,再进一步寻找基于Pytorch、Tensorflow等深度学习框架的实践练习。再人工智能学习的进程中,同时练习各种经典的机器学习算法,换换思路。毕竟可以预见,Nielse的这本书对我来讲,啃起来还是比较烧脑的;-P,半路出家的表示有些Hard,大家如果有学习建议,也欢迎提出交流~

使用神经网络识别手写数字

  通过传统的逻辑判断的方式难以写出程序对手写的数字进行识别,通过机器学习,在此处是神经网络的方式提出了解决思路,通过字体数据的训练,得出模型,进行识别。
在这里插入图片描述

Perceptrons

  Perceptron结构如下图所示
在这里插入图片描述

  threshold其实就是bias(参数b),他是一种阀值,用于对‘权重*特征’后的输出结果进行判断。这种解释,让我对bias的理解更加清晰了一些。
在这里插入图片描述
在这里插入图片描述

Sigmoid Perceptrons

  如果我们希望权重的微调可以控制输出的微调,那么上文的Perceptrons是无法实现的,在bias的位置会有0和1的跃变。举个例子,如果需要训练识别数字9,从8训练到9的过程中,各neuron的值会在0和1之间跳变,从而造成其他数字识别效果的剧烈波动。因此,一种柔和的调节思路是必要的,Sigmoid在此处提供了解决方案。

import numpy as np
import matplotlib.pyplot as plt

# Sigmoid数据
x = np.arange(-10,10,0.1)
y_s= 1 / (1 + np.exp(-x))
# StepFunction数据
y_b = []
for i in x:
    if i < 0:
        num = 0
        y_b.append(num)
    else:
        num = 1
        y_b.append(num)
# Plot the results
plt.figure()
plt.plot(x, y_s, c="r", label="Sigmoid", linewidth=2, ls='-')
plt.plot(x, y_b, c="g", label="Step Function", linewidth=2, ls='--')
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Sigmoid and Bias perceptron")
plt.grid()
plt.legend()
plt.show()

在这里插入图片描述

神经网络结构

  基本的神经网络结构如下图,其由input layer, hidden layer 以及 output layer 构成。input layer 和 output layer结构相对简单,中间的hidden layer则显得千变万化。
在这里插入图片描述
  以识别手写数字9为例,数字图像由64 x 64 = 4096的灰度值像素组成,则input layer为4096 x 1的一维向量,output为0到1的数字,当output > 0.5,则表明结果为9,越接近1,为9的可能性越大。
  神经网络结构多样,此处学习记录的是最简单的一种结构。

一种手写数字识别的神经网络

在这里插入图片描述
   图像已被实现分割好,为28 x 28 = 784的灰度图像,输出为10x1的向量,里面存储了10种结果,即0~9。

梯度下降法(Gradient Descent)

  Cost Funtion如下:
在这里插入图片描述
寻找 ω \omega ω b b b ,使得 C C C( ω \omega ω, b b b) ≈ \approx 0 0 0,其中, y ( x ) y(x) y(x) = = = ω T \omega^T ω

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值