百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

入门|关于神经网络:你需要知道这些

connygpt 2024-08-28 14:13 10 浏览

神经网络(NN)几乎可以在每个领域帮助我们用创造性的方式解决问题。本文将介绍神经网络的相关知识。读后你将对神经网络有个大概了解,它是如何工作的?如何创建神经网络?

本文涉及以下内容:

  • 神经网络的发展历史

  • 什么是真正的神经网络?

  • 单元/神经元

  • 权重/参数/连接

  • 偏置项

  • 超参数

  • 激活函数

  • 神经网络学习时发生了什么?

  • 实现细节(如何管理项目中的所有因素)

  • 关于神经网络的更多信息(更多资源链接)

神经网络的发展历史

我们简单回顾一下神经网络的发展历程,如果你想了解更多关于其发展历程的信息,请看这篇维基百科的文章(https://en.wikipedia.org/wiki/Artificial_neural_network#History),它是本章节的基础。

神经网络起源于 WarrenMcCulloch 和 Walter Pitts 于 1943 年首次建立的神经网络模型。他们的模型完全基于数学和算法,由于缺乏计算资源,模型无法测试。

后来,在 1958 年,Frank Rosenblatt 创建了第一个可以进行模式识别的模型,改变了现状。即感知器。但是他只提出了 notation 和模型。实际的神经网络模型仍然无法测试,此前的相关研究也较少。

第一批可以测试并具有多个层的神经网络于 1965 年由 Alexey Ivakhnenko 和 Lapa 创建。

之后,由于机器学习模型具有很强可行性,神经网络的研究停滞不前。很多人认为这是因为 Marvin Minsky 和 Seymour Papert 在 1969 年完成的书《感知机》(Perceptrons)导致的。

然而,这个停滞期相对较短。6 年后,即 1975 年,Paul Werbos 提出反向传播,解决了 XOR 问题,并且使神经网络的学习效率更高。

1992 年,最大池化(max-pooling)被提出,这有助于 3D 目标识别,因为它具备平移不变性,对变形具备一定鲁棒性。

2009 年至 2012 年间,JürgenSchmidhuber 研究小组创建的循环神经网络和深度前馈神经网络获得了模式识别和机器学习领域 8 项国际竞赛的冠军。

2011 年,深度学习神经网络开始将卷积层与最大池化层合并,然后将其输出传递给几个全连接层,再传递给输出层。这些被称为卷积神经网络。

在这之后还有更多的研究。

什么是神经网络?

了解神经网络的一个好方法是将它看作复合函数。你输入一些数据,它会输出一些数据。

3 个部分组成了神经网络的的基本架构:

  • 单元/神经元

  • 连接/权重/参数

  • 偏置项

你可以把它们看作建筑物的「砖块」。根据你希望建筑物拥有的功能来安排砖块的位置。水泥是权重。无论权重多大,如果没有足够的砖块,建筑物还是会倒塌。然而,你可以让建筑以最小的精度运行(使用最少的砖块),然后逐步构建架构来解决问题。

我将在后面的章节中更多地讨论权重、偏置项和单元。

单元/神经元

作为神经网络架构三个部分中最不重要的部分,神经元是包含权重和偏置项的函数,等待数据传递给它们。接收数据后,它们执行一些计算,然后使用激活函数将数据限制在一个范围内(多数情况下)。

我们将这些单元想象成一个包含权重和偏置项的盒子。盒子从两端打开。一端接收数据,另一端输出修改后的数据。数据首先进入盒子中,将权重与数据相乘,再向相乘的数据添加偏置项。这是一个单元,也可以被认为是一个函数。该函数与下面这个直线方程类似:

想象一下有多个直线方程,超过 2 个可以促进神经网络中的非线性。从现在开始,你将为同一个数据点(输入)计算多个输出值。这些输出值将被发送到另一个单元,然后神经网络会计算出最终输出值。

权重/参数/连接

作为神经网络最重要的部分,这些(和偏置项)是用神经网络解决问题时必须学习的数值。这就是你现在需要知道的。

偏置项

这些数字代表神经网络认为其在将权重与数据相乘之后应该添加的内容。当然,它们经常出错,但神经网络随后也学习到最佳偏置项。

超参数

超参数必须手动设置。如果将神经网络看作一台机器,那么改变机器行为的 nob 就是神经网络的超参数。

你可以阅读我的另一篇文章(https://towardsdatascience.com/gas-and-nns-6a41f1e8146d),了解如何优化神经网络超参数。

激活函数

也称为映射函数(mapping function)。它们在 x 轴上输入数据,并在有限的范围内(大部分情况下)输出一个值。大多数情况下,它们被用于将单元的较大输出转换成较小的值。你选择的激活函数可以大幅提高或降低神经网络的性能。如果你喜欢,你可以为不同的单元选择不同的激活函数。

以下是一些常见的激活函数:

  • Sigmoid

Sigmoid 函数

  • Tanh

tanh 函数

  • ReLU:修正线性单元

修正线性单元函数

  • Leaky ReLU

Leaky ReLU 函数

这是神经网络在任何问题中都可获得复杂度的原因。增加层(具备单元)可增加神经网络输出的非线性。

每个层都包含一定数量的单元。大多数情况下单元的数量完全取决于创建者。但是,对于一个简单的任务而言,层数过多会增加不必要的复杂性,且在大多数情况下会降低其准确率。反之亦然。

每个神经网络有两层:输入层和输出层。二者之间的层称为隐藏层。下图所示的神经网络包含一个输入层(8 个单元)、一个输出层(4 个单元)和 3 个隐藏层(每层包含 9 个单元)。

深度神经网络

具有两个或更多隐藏层且每层包含大量单元的神经网络称为深度神经网络,它催生了深度学习这一新的学习领域。上图所示神经网络就是这样一个例子。

神经网络学习时发生了什么?

教神经网络解决问题的最常见方式是使用梯度下降。梯度下降相关内容,参见:https://hackernoon.com/gradient-descent-aynk-7cbe95a778da。

除梯度下降外,另一种常见的训练神经网络方法是使用反向传播。使用这种方法,神经网络输出层的误差会通过微积分中的链式规则向后传播。这对于没有微积分知识的初学者来说可能会难以理解,但也不要被吓倒,反向传播相关内容,推荐阅读:http://neuralnetworksanddeeplearning.com/chap2.html。

训练神经网络有许多注意事项。但对于初学者来说,没有必要在一篇文章中了解全部。

实现细节(如何管理项目中的所有因素)

为了解释如何管理项目中的所有因素,我创建了一个 Jupyter Notebook,包含一个学习 XOR 逻辑门的小型神经网络。Jupyter Notebook 地址:https://github.com/Frixoe/xor-neural-network/blob/master/XOR-Net-Notebook.ipynb。

在查看并理解 Notebook 内容后,你应该对如何构建基础神经网络有一个大致的了解。

Notebook 创建的神经网络的训练数据以矩阵排列,这是常见的数据排列方式。不同项目中的矩阵维度可能会有所不同。

大量数据通常分为两类:训练数据(60%)和测试数据(40%)。神经网络先使用训练数据,然后在测试数据上测试网络的准确率。

关于神经网络的更多信息(更多资源链接)

如果你仍然无法理解神经网络,那么推荐以下资源:

YouTube:

  • Siraj Raval (https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A)

  • 3Blue1Brown (https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw)

  • The Coding Train (https://www.youtube.com/playlist?list=PLRqwX-V7Uu6aCibgK1PTWWu9by6XFdCfh)

  • Brandon Rohrer (https://www.youtube.com/channel/UCsBKTrp45lTfHa_p49I2AEQ)

  • giant_neural_network (https://www.youtube.com/channel/UCrBzGHKmGDcwLFnQGHJ3XYg)

  • Hugo Larochelle (https://www.youtube.com/channel/UCiDouKcxRmAdc5OeZdiRwAg)

  • Jabrils (https://www.youtube.com/channel/UCQALLeQPoZdZC4JNUboVEUg)

  • Luis Serrano (https://www.youtube.com/channel/UCgBncpylJ1kiVaPyP-PZauQ)

Coursera:

  • Neural Networks for Machine Learning (https://www.coursera.org/learn/neural-networks) by University of Toronto

  • Deep Learning Specialization (https://www.coursera.org/specializations/deep-learning) by Andrew Ng

  • Introduction to Deep Learning (https://www.coursera.org/learn/intro-to-deep-learning) by National Research University Higher School of Economics

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...