手把手 | 神经网络的菜鸟入门秘籍

640?wx_fmt=png


在过去几年中,如果你打开过浏览器,那么你肯定看到过几百回“神经网络”这个词。


在这篇短文中,我将为你初步介绍这一领域和神经网络本身的背景信息。接下来的5分钟可能不会让你迅速成为这个领域的世界级专家,但让你经历一个意义非凡的入门阶段却是很简单的。另外,你还将学习到一些流行术语(尤其是按文后的清单做进一步阅读),这可以成为你茶余饭后的谈资。


什么是机器学习?


要理解神经网络,我们首先需要懂机器学习。而为了理解机器学习,我们就得先谈谈人类学习,或者“经典编程”。


在经典编程中,我,也就是开发人员,需要弄明白我正在试图解决的问题的各个方面,并确切地知道怎样找到解决方案。


例如,假设我希望我的程序知道正方形和圆形之间的区别。解决这个问题的其中一种方法是编写一个可以检测边角的程序。如果我的程序检测到4个角,那么这个形状是一个正方形,如果它检测不到任何角,那么这个形状就是一个圆。


那么机器学习又是啥?一般来说,机器学习=从例子中学习。


在机器学习中,当面对上文区分圆和正方形的问题时,我们将设计一个学习系统,将许多形状及其类别(正方形或圆形)的例子作为输入,从而希望机器能够自己学习可以用来区分形状的特征。


然后,一旦机器学会了所有的特征,我们就可以给它一个以前没出现过的图像,并且希望它能够正确地对其进行分类。


640?wx_fmt=png


什么是神经元?


在神经网络的背景下,神经元是一个奇妙的名词,“聪明”的人不愿用函数(function)这个朴素名字。当然,在数学和计算机科学的背景下,函数(function)也是一个奇妙的名称,它接收输入,实现处理逻辑并输出结果。


更重要的是,神经元可以被认为是一个学习单元。


因此,我们需要在机器学习的背景下理解什么是学习单元。之后我们就可以理解神经网络最基本的构造,即神经元。


为了阐述这个问题,假设我试图理解博客文章中单词数量与人们实际从该帖子中读到的单词数量之间的关系。请注意 - 我们是在机器学习领域做这件事,因此我们要从例子中学习。


所以我在博客文章中收集了许多单词数统计的实例,用x表示,以及人们在这些帖子中实际阅读了多少单词,用y表示,我假设它们之间存在一定关系,用f表示。


这件事情的神奇之处在于,我只需要告诉机器(程序)我期望看到的关系(例如直线)大概是怎样的,机器就会明白它需要绘制的实际图形。


640?wx_fmt=png


那我在这里又得到了什么?


下一次,我想要写一篇有x个单词的博客文章,机器可以运用它发现的关系f来告诉我,我可以预期人们实际阅读的单词数量,y。


640?wx_fmt=png


所以,神经网络是......


好,如果一个神经元是一个函数,那么神经网络就是一个函数网络!这意味着我们有许多(很多)这样的函数和这样的学习单元,它们的所有输入和输出是相互交织的,就是说他们互为输入输出。


作为这个网络的设计者,我需要回答以下问题:


  • 如何为输入和输出建模?(例如,如果输入是一些文本,我可以用字母建模吗?那数字和向量呢?...。)

  • 每个神经元有哪些功能?(它们是线性的吗?还是指数型的?...)

  • 网络的架构是什么?(也就是说,哪个函数的输出是哪个函数的输入?)

  • 我可以用哪些流行术语描述我的网络?


一旦我回答了这些问题,我就可以向我的网络“展示”许多正确的输入输出的例子,这样当我“展示”给它一个它以前从未见过的新示例输入时,它就会知道正确的输出。


你也可以访问神经网络游乐场这个超级酷的网站,从而更好地理解这个过程意味着什么。


神经网络游乐场:

https://playground.tensorflow.org/


640?wx_fmt=png


神经网络 - 永无止境的故事


由于这个领域实际上在不断膨胀,每分钟出现的新内容的数量对任何人来说都是不可能跟踪的。(不知道会不会有朝一日我们能够建立一个能够追踪人类在AI领域进步的AI)


进入这个领域,首先要知道的是没有人知道一切。所以你不用担心自己不如他人,只要保持好奇心就好了。:)


因此,推荐一些比较优秀的资源:


Gal Yona,在这个领域非常棒的博主之一。她的帖子包括从核心技术的解释到半哲学的评论。


核心技术的解释:

https://towardsdatascience.com/do-gans-really-model-the-true-data-distribution-or-are-they-just-cleverly-fooling-us-d08df69f25eb

到半哲学的评论:

https://towardsdatascience.com/the-tale-of-1001-black-boxes-62d12b5886aa


Siraj Raval 是一个拥有大量视频的油管博主(youtuber),从理论解释到动手教程都非常有趣!


理论解释:

https://www.youtube.com/watch?v=xRJCOz3AfYY

动手教程:

https://www.youtube.com/watch?v=pY9EwZ02sXU


Christopher Olah,一位充满激情和洞察力的研究员,拥有一个超炫的博客,其中包括从基本概念到深度学习的帖子。


从基本概念:

http://colah.github.io/posts/2015-09-Visual-Information/

深度学习:

https://distill.pub/2017/feature-visualization/


《走向数据科学》是这个领域最大的中型出版物,无论你有几分钟或几小时的时间,都可以去他们的主页开始探索一切,从实用工具到深度算法应有尽有。


走向数据科学:

https://towardsdatascience.com/


相关报道:

https://medium.freecodecamp.org/neural-networks-for-dummies-a-quick-intro-to-this-fascinating-field-795b1705104a

转自:大数据文摘

∞∞∞

640?wx_fmt=png

公众号回复“IT派”

邀你加入 IT派 { 深广创投圈 } 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
神经网络是一种模拟人脑神经元之间相互连接的计算模型。在Python中,可以使用多种库来实现神经网络,如TensorFlow、PyTorch和Keras。下面是一个简单的手把手教程来构建一个基本的神经网络模型: 1. 导入所需的库: ```python import numpy as np import matplotlib.pyplot as plt import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.optimizers import Adam ``` 2. 加载数据集: ```python (x_train, y_train), (x_test, y_test) = mnist.load_data() ``` 3. 数据预处理: ```python # 将图像转换为一维向量 x_train = x_train.reshape(x_train.shape[0], -1) x_test = x_test.reshape(x_test.shape[0], -1) # 将图像像素值缩放到0-1之间 x_train = x_train.astype('float32') / 255.0 x_test = x_test.astype('float32') / 255.0 # 对标签进行独热编码 y_train = tf.keras.utils.to_categorical(y_train, num_classes=10) y_test = tf.keras.utils.to_categorical(y_test, num_classes=10) ``` 4. 构建模型: ```python model = Sequential() model.add(Dense(64, activation='relu', input_shape=(784,))) model.add(Dense(64, activation='relu')) model.add(Dense(10, activation='softmax')) ``` 5. 编译模型: ```python model.compile(optimizer=Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy']) ``` 6. 训练模型: ```python history = model.fit(x_train, y_train, batch_size=128, epochs=10, validation_split=0.2) ``` 7. 评估模型性能: ```python loss, accuracy = model.evaluate(x_test, y_test) print('Test loss:', loss) print('Test accuracy:', accuracy) ``` 这是一个简单的示例,你可以根据自己的需求和数据集进行进一步的修改和调整。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值