神经网络体系搭建(一)——神经网络

本篇是神经网络体系搭建的第一篇,解决体系搭建的前四个问题,详见神经网络体系搭建(序)

神经网络

最简单的神经网络

神经网络的定义就不再赘述,直接从最简单的神经网络说起。

将一系列输入数据,通过训练好的网络模型处理,得到输出结果,这是神经网络决策的步骤。那么我们的重点就是通过训练得到网络模型

从上图可以看出,模型的关键其实是寻找合适的权重矩阵

那么如何寻找呢,是一个暴力过程。

给一个初始权重矩阵,用这个矩阵进行预测,看预测结果和实际结果相差多远(损失函数的作用),根据这个相差多远的情况,来更新权重矩阵,直到预测结果和实际结果相差最小(其实就是求损失函数的最小值)的时候为止,带有这个能使预测值与实际结果相差最小的权重矩阵的模型就是我们训练好的网络模型了。

求损失函数最小值的方法通常为梯度下降

已经知道了权重矩阵、损失函数的位置和作用,还有一个概念没有解释——激活函数。

激活函数的作用是给神经元添加非线性因素,说白了就是如果不通过激活函数,输出就是线性函数,y=wx+b,但是wx+b通过激活函数,得到的y就可以是非线性的了。

思维导图中罗列了常用激活函数,优点和使用情况不属于体系的主干系列,因此不再这里赘述,可以参考常用激活函数比较

解决问题的步骤

数学部分

损失函数通常有误差平方和(SSE)、误差平方的均值(MSE)等,也不属于主干,具体的可以参考深度学习中的损失函数总结以及Center Loss函数笔记。找到合适的损失函数是一个可优化点。

梯度下降

有了损失函数,我们的重点是如何找到损失函数的最小值。采用的算法是梯度下降。梯度下降最常见的例子就是下山,从山顶每次找最陡的一条路,达到最快下山的目的,陷阱也就是可能还没有到山脚却以为到了山脚(陷入局部最优而非全局最优)。

那么梯度下降说白了就是找斜率,找斜率就是求导。

单行数据通过单层网络为例:

如果有多个输出单元:

代码部分

单条数据

import numpy as np
# 定义激活函数
def sigmoid(x):
    return 1/(1+np.exp(-x))

# 计算激活函数导数
def sigmoid_prime(x):
    return sigmoid(x) * (1 - sigmoid(x))

# 设置输入数据x
x = np.array([x1, x2, x3, x4, x5]) # xi为用来举例的假数据,替换即可
# 设置标签y
y = np.array(y) # y为用来举例的假数据,替换即可
# 设置学习率
learn_rate = 0.5
# 初始化权重矩阵
w = np.array([w1, w2, w3, w4, w5]) #wi为用来举例的假数据,替换即可
# 计算h
h = np.dot(x, w)
# 计算预测值
y_predict  = sigmoid(h)
# 计算误差
error = y - y_predict
# 计算误差项
error_term = error * sigmoid_prime(h)
# 计算权重变化量delta_w
delta_w= learn_rate * error_term * x
# 更新权重矩阵
w += delta_w

多条数据

其实将单条数据的delta_w通过循环更新,最后在累加到权重矩阵中,更新e代就是多条数据的训练。

for e in range(epochs):
    del_w = np.zeros(w.shape)
    for x, y in zip(features.values, targets):
        h = np.dot(x, w)
        y_predict= sigmoid(h)

        error = y - y_predict

        error_term = error * sigmoid_prime(h)

        del_w += error_term * x

    weights += learnrate * del_w / len(x)

问题回答

至此,序中的四个问题已有了答案: - 神经网络是什么?解决问题的步骤(算法)是什么? 见思维导图。 - 梯度下降用在神经网络的哪一步? 梯度下降用来找损失函数的最小值,数学原理和代码见上。 - 损失函数是干什么用的? 损失函数用来衡量预测值与真实值的差距,有了损失函数,才能指导权重矩阵的更新。 - 神经网络模型有哪些参数可以调整(优化)? 找合适的初始权重矩阵、找合适的激活函数、找合适的损失函数、找合适的学习率。


以上内容来自822实验室神经网络知识分享 我们的822,我们的青春 欢迎所有热爱知识热爱生活的朋友和822思享实验室一起成长,吃喝玩乐,享受知识。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法工程师

机器学习中的超参数的选择与交叉验证

1. 超参数有哪些   与超参数对应的是参数。参数是可以在模型中通过BP(反向传播)进行更新学习的参数,例如各种权值矩阵,偏移量等等。超参数是需要进行程序员自己...

3559
来自专栏Spark学习技巧

机器学习之学习率 Learning Rate

2022
来自专栏AI研习社

如何一步一步提高图像分类准确率?

一、问题描述 当我们在处理图像识别或者图像分类或者其他机器学习任务的时候,我们总是迷茫于做出哪些改进能够提升模型的性能(识别率、分类准确率)。。。或者说我们...

46310
来自专栏机器之心

深度学习目标检测模型全面综述:Faster R-CNN、R-FCN和SSD

选自medium 机器之心编译 机器之心编辑部 Faster R-CNN、R-FCN 和 SSD 是三种目前最优且应用最广泛的目标检测模型,其他流行的模型通常与...

4287
来自专栏人工智能LeadAI

深度学习与TensorFlow: VGG论文笔记

马毅老师曾说过:”如果你没有看过近30年的经典论文,你是做不出成果的”.现如今深度学习如此火热,一些关键节点发布的文章更应该好好的阅读,因此我想在未来的一段时间...

1163
来自专栏LhWorld哥陪你聊算法

【机器学习】--Adaboost从初始到应用

AdaBoost算法和GBDT(Gradient Boost Decision Tree,梯度提升决策树)算法是基于Boosting思想的机器学习算法。在Boo...

1132
来自专栏有趣的Python

8- 深度学习之神经网络核心原理与算法-卷积神经网络

1946
来自专栏决胜机器学习

机器学习(十二) ——神经网络代价函数、反向传播、梯度检验、随机初始化

机器学习(十二)——神经网络代价函数、反向传播、梯度检验、随机初始化 (原创内容,转载请注明来源,谢谢) 一、代价函数 同其他算法一样,为了获得最优化的神经网...

3884
来自专栏达观数据

达观数据深度学习资料之卷积神经网络(下篇)

达观数据深度学习资料之卷积神经网络(下篇) 4.2什么是池化? 在通过卷积获得特征后进行分类,依然面临计算量大的挑战。及时一张96×96像素的图片,经过400...

35710
来自专栏深度学习计算机视觉

计算机视觉中的物体检测方法

本文适合刚入门物体检测的人群学习,不涉及公式推理。 目录 *摘要 *相关物体检测数据集介绍 *现有的主流物体检测算法 *物体检测的难点与挑战 *相关术语介绍 *...

2804

扫码关注云+社区