Neural Networks and Deep Learning(一)

2024-06-03 07:38
文章标签 deep learning neural networks

本文主要是介绍Neural Networks and Deep Learning(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Neural Networks and Deep Learning学习(一)

之间学习CNN核卷积,ufldl教程看了大部分,现在系统的过一遍深度学习,加强自己对深度学习和神经网络的理解。

这只是学习笔记,不是教程,只是本人学习此文档的理解和一些见解

第一章理解

1) 权重之间的连线可以看成一种“因素”,其权重则可以表示该“因素”的可能性。如下图所示,b由一系类的a决定的,a与b之间的连线表示a选择b发生的概率,b的偏置则表示自身的权值

神经网络
把权重的总和与阈值比较得到输出,

output={01ififjwjxjthresholdjwjxj>threshold

然后把阈值写在左边作为偏置
output={01ififwjxj0wjxj>0

还可以理解如下图所示:

神经网络理解

图中最上面小球为输入数据,小球不同的大小表示不同的输入数据;中间的矩形则表示神经网络,其内部不同大小的小球和不同位置的小球表示不同的参数,其中位置可以看成权重,大小可以看成偏置;底部的梯形表示输出的结果,不同的标号表示不同的输出结果。神经网络的训练就是调节矩形内部的小球,使对于不同的输出小球,最终会落在合理的输出矩形中。

2) 神经网络就是利用权重(偏置)的微小改变引起输入的微小变化。

练习1_2_1 把一个感知神经网络的权值和偏置乘以一个正常数c,证明网络的行为没有改变。
证明: 感知机的输出结果是0,1。当输出结果大于1时,output为1;当输出小于0时,output为0。则当乘以c时 cwx+cb=c(wx+b) ,其output受到 wx+ 的影响。

练习1_2_2 S型神经元(激活函数由sigmoid构成),假设 wx+b0 ,把权重和偏置乘以一个正常数c,证明当 c 时,S型神经元网络和感知器网络完全一致。若 wx+b=0 ,结果如何?
证明: 由于 wx+b0 ,则 c(wx+b)0(c>0) ,当 wx+b>0 时,由 c 得到 c(wx+b)+ ,则 σ(c(ws+b))1 ;当 wx+b<0 时,由 c 得到 c(wx+b) ,则 σ(c(ws+b))0 。若 wx+b=0 c(wx+) ,无变化。

练习1_4 在输出层后增加一层使用2进制层表示输出,设置其权重。
答:: 假设增加4个神经元,输出0000表示0,输出0001表示1 ,…。只需要设置10个输出与相应位相连的权重为1即可。

3) 为什么使用二次代价(损失函数),而不是直接最大化,使目标最优?
答: 由于权重和偏置组成的函数不是一个平滑函数,对权重的微小改变不会影响结果,使用二次代价函数可用微小的改变取得较好的效果。如下图所示:

拟合

黑色的为正确的曲线,红的为拟合的曲线,如果直接调节红色曲线来实现拟合比较困难,不容易调节具体的参数,如果使用与原始曲线的“差距”来进行调节,就可以有针对的进行调节。

4) 梯度下降法:把函数想象成一个山谷,求最小值就是小球从山谷的斜坡落下来到达山底,由于受到“摩擦”,“重力”不同,小球的下降的方式不同。梯度可以看成下降的方向,学习率则为下降速度,其值不能太大或者太小,太大无法到达最低点,太小容易陷入局部最优且速度太慢,如下图所示,小球1速度太小,小球2速度太大。 ΔCCΔv 说明 C 把v的变化关联为C的变化。

这里写图片描述

练习1_5_1 证明: CΔv 取得最小值的 Δv CΔv=ηC
证明:由柯西-施瓦茨不等式 |<x,y>|||x||||y|| 得到:

||Δv||||C||CΔvCΔv||Δv||||C||=||Δv||||C||||C||2CC=||Δv||||C||CC=ηCCΔvηC

练习1_5_2 梯度下降法在一元函数的解释。
答: 一元函数图像如下:

这里写图片描述

在a的左边时,梯度为曲线的斜率,其值为负值,随着x的增大,即 Δx>0 ΔyCΔx Δy<0 ,y降低。当在a的右边时,梯度为正值,随着x的减小,即 Δx<0 ΔyCΔx Δy<0 ,y降低。则使用梯度下降法,总会到达最低点。

5) 当直接求输入数据的偏导数时,代价非常的大,百万的输入数据,其二阶偏导数则需要数万亿(百万的平方的一半 2Cvivk=2Cvkvi ),这就引出使用权重和偏置,对权重和偏置求导,推导出更新函数。

练习1_5_3 在线学习优点(on-line learing,把批量数据大小设为1,每次输入一个数据,就更新权重)。
答:这个名词提出较早的时间,很难找到关于其理论的东西,网上的在线学习都是教育方面的,最后在一本英文书On-Line Learning in Neural Netwoks找到了相关的知识。

优点:
连续的on-line learning中,梯度下降法是在许多强大和常用的方法中的微分误差法,对于非平稳情况特别有效。
缺点:
a>训练的灵明度。减慢了训练,影响收敛到固定点的能力。
b>许多好的优化方法依赖于一个固定的误差面,而on-line learning产生随机误差面。
c>Bayesian提供了一个成功的batch learning,而on-line learning不会储存过去的信息,受到限制。

练习1_6 神经网络传播方程。
答:

aa=σ(w1x+b1)=σ(w2x+b2)=σ(w2σ(w1x+b1)2)=11+ew2ab2

代码说明

分别建立了3个文件,Network.py, mnist_loader.py, train.py,作为建立网络, 加载数据和测试计算。具体代码如下:
Network.py

# coding="utf-8"
import numpy as npclass Network(object):# 网络初始化函数,初始化每层的权重和偏置def __init__(self, sizes):self.num_layers = len(sizes)self.sizes = sizesself.biases = [np.random.randn(y, 1) for y in sizes[1:]]self.weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1], sizes[1:])]# 前向传播 激活函数使用sigmoiddef feedforward(self, a):for b, w in zip(self.biases, self.weights):a = sigmoid(np.dot(w, a) + b)return a# 随机梯度下降法用于计算参数def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):# 判断是否在每一层进行测试结果计算if test_data:n_test = len(test_data)n = len(training_data)# 进行epochs次计算for j in xrange(epochs):# 将序列的所有元素从新排列np.random.shuffle(training_data)# 创建batchesDatamini_batches = [training_data[k:k + mini_batch_size] for k in xrange(0, n, mini_batch_size)]for mini_batch in mini_batches:# 更新参数self.update_mini_batch(mini_batch, eta)if test_data:print "Epoch {0}: {1} / {2}".format(j, self.evaluate(test_data), n_test)else:print "Epoch {0} complete".format(j)# 参数的更新def update_mini_batch(self, mini_batch, eta):# 初始化梯度nabla_b = [np.zeros(b.shape) for b in self.biases]nabla_w = [np.zeros(w.shape) for w in self.weights]for x,y in mini_batch:# 梯度的计算delta_nabla_b, delta_nabla_w = self.backprop(x, y)nabla_b = [nb + dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]nabla_w = [nw + dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]self.weights = [w - (eta/len(mini_batch))*nw for w, nw in zip(self.biases, nabla_w)]self.biases = [b - (eta/len(mini_batch))*nb for b, nb in zip(self.biases, nabla_b)]# 反向传播计算梯度def backprop(self, x, y):nabla_b = [np.zeros(b.shape) for b in self.biases]nabla_w = [np.zeros(w.shape) for w in self.weights]# 激活层值activation = xactivations = [x]zs = []for b, w in zip(self.biases, self.weights):z = np.dot(w, activation) + bzs.append(z)activation = sigmoid(z)activations.append(activation)# 求出残差 具体导见ufldl教程delta = self.cost_derivative(activations[-1], y) * sigmoid_prime(zs[-1])nabla_b[-1] = deltanabla_w[-1] = np.dot(delta, activations[-2].transpose())# l-1 ... 1 层的梯度计算for l in xrange(2, self.num_layers):z = zs[-l]sp = sigmoid_prime(z)delta = np.dot(self.weights[-l + 1].transpose(), delta) * spnabla_b[-l] = deltanabla_w[-l] = np.dot(delta, activations[-l - 1].transpose())return (nabla_b, nabla_w)# 测试值def evaluate(self, test_data):test_results = [(np.argmax(self.feedforward(x)), y) for (x, y) in test_data]return sum(int(x == y) for (x, y) in test_results)# 最后一层残差计算def cost_derivative(self, output_activations, y):return (output_activations - y)# 激活函数
def sigmoid(z):return 1.0 / (1.0 + np.exp(-z))#激活函数导数
def sigmoid_prime(z):return sigmoid(z)*(1 - sigmoid(z))

mnist_loader.py

# coding="utf-8"
import cPickle
import gzipimport numpy as np# 加载数据
def load_data():f = gzip.open('./data/mnist.pkl.gz', 'rb')training_data, validation_data, test_data = cPickle.load(f)f.close()return (training_data, validation_data, test_data)def load_data_wrapper():tr_d, va_d, te_d = load_data()training_inputs = [np.reshape(x, (784, 1)) for x in tr_d[0]]training_results = [vectorized_result(y) for y in tr_d[1]]training_data = zip(training_inputs, training_results)validation_inputs = [np.reshape(x, (784, 1)) for x in va_d[0]]validation_data = zip(validation_inputs, va_d[1])test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]]test_data = zip(test_inputs, te_d[1])return (training_data, validation_data, test_data)def vectorized_result(j):e = np.zeros((10, 1))e[j] = 1.0return e

train.py

# coding="utf-8"
import mnist_loader
import Network
# 测试程序# 加载数据
training_data, validation_data, test_data = mnist_loader.load_data_wrapper()
# 建立网络
net = Network.Network([784, 100, 10])
# 随机梯度下降法计算网络
net.SGD(training_data, 30, 10, 3.0, test_data)

这篇关于Neural Networks and Deep Learning(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026362

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

简单的Q-learning|小明的一维世界(3)

简单的Q-learning|小明的一维世界(1) 简单的Q-learning|小明的一维世界(2) 一维的加速度世界 这个世界,小明只能控制自己的加速度,并且只能对加速度进行如下三种操作:增加1、减少1、或者不变。所以行动空间为: { u 1 = − 1 , u 2 = 0 , u 3 = 1 } \{u_1=-1, u_2=0, u_3=1\} {u1​=−1,u2​=0,u3​=1}

简单的Q-learning|小明的一维世界(2)

上篇介绍了小明的一维世界模型 、Q-learning的状态空间、行动空间、奖励函数、Q-table、Q table更新公式、以及从Q值导出策略的公式等。最后给出最简单的一维位置世界的Q-learning例子,从给出其状态空间、行动空间、以及稠密与稀疏两种奖励函数的设置方式。下面将继续深入,GO! 一维的速度世界 这个世界,小明只能控制自己的速度,并且只能对速度进行如下三种操作:增加1、减

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S

Deep Ocr

1.圈出内容,文本那里要有内容.然后你保存,并'导出数据集'. 2.找出deep_ocr_recognition_training_workflow.hdev 文件.修改“DatasetFilename := 'Test.hdict'” 310行 write_deep_ocr (DeepOcrHandle, BestModelDeepOCRFilename) 3.推理test.hdev

OpenSNN推文:神经网络(Neural Network)相关论文最新推荐(九月份)(一)

基于卷积神经网络的活动识别分析系统及应用 论文链接:oalib简介:  活动识别技术在智能家居、运动评估和社交等领域得到广泛应用。本文设计了一种基于卷积神经网络的活动识别分析与应用系统,通过分析基于Android搭建的前端采所集的三向加速度传感器数据,对用户的当前活动进行识别。实验表明活动识别准确率满足了应用需求。本文基于识别的活动进行卡路里消耗计算,根据用户具体的活动、时间以及体重计算出相应活

Complex Networks Package for MatLab

http://www.levmuchnik.net/Content/Networks/ComplexNetworksPackage.html 翻译: 复杂网络的MATLAB工具包提供了一个高效、可扩展的框架,用于在MATLAB上的网络研究。 可以帮助描述经验网络的成千上万的节点,生成人工网络,运行鲁棒性实验,测试网络在不同的攻击下的可靠性,模拟任意复杂的传染病的传

Convolutional Neural Networks for Sentence Classification论文解读

基本信息 作者Yoon Kimdoi发表时间2014期刊EMNLP网址https://doi.org/10.48550/arXiv.1408.5882 研究背景 1. What’s known 既往研究已证实 CV领域著名的CNN。 2. What’s new 创新点 将CNN应用于NLP,打破了传统NLP任务主要依赖循环神经网络(RNN)及其变体的局面。 用预训练的词向量(如word2v

【机器学习】生成对抗网络(Generative Adversarial Networks, GANs)详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 生成对抗网络(Generative Adversarial Networks, GANs)详解GANs的基本原理GANs的训练过程GANs的发展历程GANs在实际任务中的应用小结 生成对