TowardsDataScience 博客中文翻译 2020(六百六十)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

用 PyTorch 校准神经网络

原文:https://towardsdatascience.com/neural-network-calibration-using-pytorch-c44b7221a61?source=collection_archive---------2-----------------------

用几行代码就能让你的模型适用于安全关键的应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

UnsplashGreg Shield 拍照

我想你是在这家新的高科技医院工作的放射科医生。上周,你得到了第一个基于神经网络的模型,它可以帮助你根据病人的数据进行诊断,并最终提高诊断的准确性。但是等等!就像我们人类一样,合成模型的预测永远不会 100%准确。但是,我们如何知道一个模型是绝对确定的,还是仅仅超出了猜测的范围呢?这些知识对于正确的解释和选择合适的治疗方法是至关重要的。

假设你更像是一名工程师:这种情况也与自动驾驶高度相关,在自动驾驶中,汽车必须不断做出决定,判断前方是否有障碍。忽略不确定性会很快变得很糟糕。

如果你像 90%的深度学习社区(包括过去的我)一样,你只是假设由 Softmax 函数
产生的预测代表概率,因为它们被整齐地挤压到域[0,1]中。这是一个常见的陷阱,因为这些预测通常过于自信。正如我们将很快看到的,这种行为受到各种架构选择的影响,如批量规范化的使用或层数。

你可以在这里找到一个交互式 Google Colab 笔记本,上面有所有代码。

可靠性图

正如我们现在所知道的,希望输出校准的置信度而不是它们的原始对应物。为了直观地了解特定架构在这方面的表现,经常使用可靠性图表

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在 CIFAR10 上训练了 10 个时期的 ResNet101 的可靠性图(图片由作者提供)

用一句话来概括,可靠性图显示了预测的置信度得分与其实际准确性的对比情况。因此,给定 100 个预测,每个预测的置信度为 0.9,如果模型完全校准,我们预计其中 90%是正确的。

为了完全理解正在发生的事情,我们需要更深入一点。从图中可以看出,测试集的所有置信度得分都被分入 M=10 个不同的仓[0,0.1],[0.1,0.2],…,[0.9,1]。对于每个箱,我们可以计算它的精度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

信心

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,这两个值都显示为一个条形图,其中同一条线表示完美校准。

韵律学

图表和情节只是故事的一面。为了根据模型的校准误差对模型进行评分,我们需要定义指标。幸运的是,这里最常用的两个指标都非常直观。

预期校准误差(ECE) 只是对绝对精度/置信度差异进行加权平均。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于如上所述的安全关键应用,测量精确度和置信度之间的最大差异可能是有用的。这可以通过使用最大校准误差(MCE) 来完成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

温度标度

我们现在想关注如何解决这个问题。虽然存在许多解决方案,如直方图宁滨、 保序回归贝叶斯宁滨分位数(BBQ)普拉特缩放(以及它们对多类问题的相应扩展),但我们希望将重点放在温度缩放。这是因为它是最容易实现的,同时给出了上述其他算法中的最佳结果。

为了充分理解它,我们需要后退一步,看看神经网络的输出。假设一个多类问题,网络的最后一层输出逻辑 z ᵢ ∈ ℝ.然后可以使用 Softmax 函数σ获得预测的概率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

温度缩放直接作用于逻辑 z(而不是预测的概率!!)并使用单一参数 T > 0 对所有类别进行缩放。校准后的置信度可以通过下式获得

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

值得注意的是,参数 T 是根据验证集的负对数似然(NLL)损失进行优化的,网络参数在此阶段是固定的。

结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ResNet101 在 CIFAR10 上训练 10 个时期并使用温度标度校准的可靠性图(图片由作者提供)

正如我们从图中看到的,这些条现在更接近身份线,表明几乎完美的校准。我们也可以从指标中看到这一点。经济效率从 2.10%下降到 0.25%,经济效率从 27.27%下降到 3.86%,这是一个巨大的进步。

PyTorch 中的实现

正如承诺的那样,PyTorch 中的实现相当简单。

首先,我们定义在给定特定温度 T逻辑的情况下返回校准置信度的 T_scaling 方法。

在下一步中,必须使用 LBGFS 算法来估计参数 T。这在 GPU 上应该只需要几秒钟。

代码有点类似于 gpleiss 的

欢迎你在我这里创建的 Google Colab 笔记本里玩一玩

结论

如本文所示,只需几行代码就可以完成网络校准,并有很大的改进。如果有足够的兴趣,我很乐意在另一篇 Medium 文章中讨论模型校准的其他方法。如果你有兴趣深入研究这个话题,我强烈推荐郭等人的论文“关于神经网络的校准

干杯!

基于 Keras 的神经网络校准

原文:https://towardsdatascience.com/neural-network-calibration-with-keras-76fb7c13a55?source=collection_archive---------7-----------------------

在真实场景中调整神经网络概率分数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由 Lewis Fagg 拍照

概率的概念在机器学习领域很常见。在分类任务中,概率是几乎每个预测模型的输出分数以及相对标签。将它们显示在一起比只提供原始分类报告更能提供信息。通过这种方式,我们使用概率作为置信分数来近似我们的模型预测的不确定性。这是一种常见的做法,反映了我们的推理方式。

问题是我们的算法不够智能,无法以可信的置信度分数的形式提供概率。他们倾向于不校准结果,也就是说,如果我们将结果与预期的准确度进行比较,他们会高估或低估概率。这导致了误导性的可靠性,破坏了我们的决策政策。

在这篇文章中,我们想用概率来处理神经网络校准的问题。正如我们将看到的,建立一个校准的模型不是显而易见的,我们必须在开发过程中小心谨慎。我们操作适当的技术来校准真实分类问题中的分数,以使不会在自动拍卖中被踢,在自动拍卖中,风险是购买一个柠檬

数据

数据集是从 Kaggle 收集的,来自过去的比赛’ 不要被踢!’。这个比赛的挑战是预测在拍卖会上购买的汽车是否是一个好东西。当车辆出现严重问题或其他一些不可预见的问题时,经常会导致跳车,给经销商造成很高的成本。我们必须找出哪些汽车被淘汰的风险更高,从而为经销商提供真正的价值。该问题可以作为一个二进制分类任务来进行(好坏买?)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

标签分发

我们可以处理的变量是分类变量和数字变量的混合:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们操作一个标准的预处理:NaNs 值用中位数(对于数值)和“未知”类(对于分类)填充。然后对数值变量进行标准缩放,对分类变量进行普通编码。

模型

用于预测我们的购买是否划算的模型是一个具有分类嵌入的前馈神经网络。类别嵌入在第二层连接,而在最后部分,我们保持原始输出层(logits)和激活(softmax)之间的分离,用于概率计算。当我们需要校准模型时,这个小技巧会对我们有用。

def get_model(cat_feat, emb_dim=8):

    def get_embed(inp, size, emb_dim, name): emb = Embedding(size, emb_dim)(inp)
        emb = Flatten(name=name)(emb) return emb

    inp_dense = Input(shape=len(num_))

    embs, inps = [], [inp_dense]

    x = Dense(128, activation='relu')(inp_dense)

    for f in cat_feat:
        inp = Input((1,), name=f+'_inp')
        embs.append(get_embed(inp, cat_[f]+1, emb_dim, f))
        inps.append(inp)

    x = Concatenate()([x]+embs)
    x = BatchNormalization()(x)
    x = Dropout(0.3)(x)
    x = Dense(64, activation='relu')(x)
    x = Dropout(0.3)(x)
    x = Dense(32, activation='relu')(x)

    logits = Dense(2, name='logits')(x)
    out = Activation('softmax')(logits)

    model = Model(inps, out)
    model.compile(optimizer='adam', 
                  loss ='categorical_crossentropy', 
                  metrics=[tf.keras.metrics.AUC()])

    return model

我们在训练、验证和测试中分离初始数据集。验证将首先用于网络调谐,然后在第二阶段拟合校准程序的温度标度系数。拟合后,我们在测试数据上实现了 0.90%的精确度,这比将所有汽车分类为好交易的随机模型要好。

神经网络校准

正如我们所看到的,我们的模型可以在看不见的数据上提供良好的性能。但是*这个结果有多靠谱?*预测校准良好的概率的优点是,如果预测的概率接近 1 或 0,我们可以有信心,否则就不那么有信心。在我们的例子中,如果没有,我们的分类器可能会过度预测类似的汽车为“柠檬”,这可能导致不购买实际上状况良好的汽车的决定。

根据定义,如果对于任何概率值 p,对应于具有 p*100 %精度水平的类别预测,则模型被完美校准。为了检查我们的分类器是否校准良好,我们需要做的就是绘制一个图!同时,产生校准概率非常简单,因为应用了后处理技术。

第一步是绘制可靠性图,在这里我们可以比较预期的准确性和预测的可信度。为方便起见,每个等宽组/箱计算阳性分数和平均预测值。这可以针对二元或多类问题进行计算,并为每个类生成一条曲线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

校准前的可靠性图

最佳情况是当我们在计算的概率和阳性分数之间有一个完美的线性关系时(蓝色虚线)。在我们的例子中,我们的神经网络倾向于分别高估和低估中间两类的概率。我们可以用一个适当的指数来量化校准的好坏,即所谓的预期校准误差(ECE),即预期精度和预测置信度之间差异的加权(每个箱中样本的比例)平均值(越低越好)。

我们可以通过应用一种技术来调整 ECE,这种技术是温度缩放的扩展,称为普拉特缩放。神经网络输出一个称为 logits 的向量。Platt scaling 简单地将 logits 向量除以一个学习到的标量参数 T,,然后将其传递给 softmax 函数以获得类概率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

y_hat 是预测值,z 是逻辑值, T 是学习参数

实际上,只需几行代码,我们就可以构建自己的函数来计算温度比例。比例因子 T 是在预定义的验证集上学习的,其中我们试图最小化平均成本函数(在 tensor flow:TF . nn . soft max _ cross _ entropy _ with _ logits)。输入和输出将分别是我们的逻辑值,用可学习的 T 进行缩放,以及虚拟向量形式的真实输出。列车是用随机梯度下降法经典计算的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

校准后的可靠性图

最后,两个班级的 ECE 分数都有所提高。正如我们在上面新的可靠性图表中看到的,我们可以得到更精确的概率。

摘要

在这篇文章中,我们研究了一种后处理技术来校准我们的神经网络的概率,并在可能的情况下(并非总是温度标度有效),让它成为一种更可信的工具。这是一个非常简单的技巧,适用于任何地方,如果我们关心我们的模型计算决策的概率,这变得很有用。

查看我的 GITHUB 回购

保持联系: Linkedin

参考文献

用于生成面包食谱的神经网络

原文:https://towardsdatascience.com/neural-network-for-generating-bread-recipes-d872e15b1d1c?source=collection_archive---------40-----------------------

面包真的很好吃!

2017 年,一个朋友给了我一些酸面团发酵剂用来做面包,从那以后,我的生活发生了变化。这听起来很俗气,但我发现了一个爱好,它让我一次买了差不多 200 磅面粉(说真的),养成了两周一次的披萨烘焙习惯,并梦想着未来几天我要做什么面包!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左边是我用我的神经网络模型生成的食谱做的一条酸奶面包。右边是分析和预测面包食谱的代码。(图片由作者提供)

因为我花了很多时间烘焙酸面团和试验新配方,所以我想看看我是否可以创建一个人工智能驱动的食谱生成器,它可以预测我要做的东西!我经常去的技术、技巧和诀窍网站之一是面包烘焙论坛 The Fresh Loaf ,在那里人们可以提问和发布食谱。我的想法是抓取这个网站,获取数据来训练神经网络,以生成新的面包食谱——这就是我所做的。在这个项目结束时,我能够实现我的目标:烘烤一条受机器学习启发的面包,用神经网络预测配料。

由于这个项目有多个组成部分,我将在几篇文章中对它们进行分解。第一部分在 Medium 上,其余部分在我的博客上, https://pratima.io. 我为这个项目使用的所有代码都在这个回购中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我的核桃酸面团面包,附带的内部图片(称为面包屑照片)显示出由于核桃中的单宁而产生的紫色条纹。化学!(图片由作者提供)

项目概述

在这个项目中,我按照以下步骤获得了一个配方生成模型:

  • 首先,我浏览了新鲜面包网站,获得了一份食谱列表,对其进行了清理和可视化,以了解数据集中的趋势(第一部分——你现在正在阅读的内容)
  • 然后,我使用 NLP 工具研究了这些数据,以进一步了解博客上的人们在他们的帖子中说了些什么
  • 最后,我训练了一个神经网络来学习基于单词的语言模型,并从中生成句子来获得新的食谱

在这篇文章中,我将描述该项目的数据收集和数据探索部分。

抓取网站获取数据

我用 python 中的 urllib 库查询网页的网站和美汤解析 HTML 代码。检查新鲜面包上的博客帖子的源代码,我意识到包含食谱的帖子有类node-type-blog,而其他帖子有类似node-type-forum的其他类;所以我确保只抓取以前班级的页面。然后我必须确定包含文本的博客主体在哪里。标签有很多嵌套,对我来说,有点乱,因为我不经常看 HTML 代码。这个类的<div>元素既包含博客文本,也包含评论和广告,但是我只想分离出菜谱。所以我决定在 Beautiful Soup 中使用prettify()函数,并检查结果字符串,看看文本主体在哪里。

import urllib.request as urlib
from bs4 import BeautifulSoupdef get_recipe(page_idx):
  try:
    page_url = f’[http://www.thefreshloaf.com/node/{page_idx}'](http://www.thefreshloaf.com/node/{page_idx}')
    page = urlib.urlopen(page_url)
    soup = BeautifulSoup(page, ‘html.parser’)
    # only process pages that are blog posts, aka contain recipes
    if ‘node-type-blog’ in soup.body[‘class’]:
      print(f’blog at index {page_idx}’)
      soup = soup.prettify()
      soup = soup[soup.find(‘title’):]
      soup = soup[soup.find(‘content=”’)+len(‘content=”’):]
      end = soup.find(‘“‘)
      return preprocess(soup[:end])
  except Exception:
    print(f’Page: [http://www.thefreshloaf.com/node/{page_idx](http://www.thefreshloaf.com/node/{page_idx)} not found!’)

这个字符串中的标记使得找到菜谱主体(包含在内容部分中)变得非常容易,在分离出这个字符串之后,我使用了一个快速预处理函数来去除菜谱文本中的任何 HTML 残余。

def preprocess(text):
  text = text.replace(u’<br/>’, ‘’)
  text = text.replace(‘(<a).*(>).*(</a>)’, ‘’)
  text = text.replace(‘(&amp)’, ‘’)
  text = text.replace(‘(&gt)’, ‘’)
  text = text.replace(‘(&lt)’, ‘’)
  text = text.replace(u’\xa0', ‘ ‘)
  return text

我搜集了大约 10000 个帖子,最后得到了 1257 个食谱,我把它们收集到一个文本文档中,每个食谱都用一个新行隔开。我可以继续搜集更多信息,但在查询了几个小时后,网站停止了响应,所以我决定停下来,从这里了解数据。

数据清理和探索

首先,我将文本文件加载到一个 Jupyter 笔记本上,并计算了每个食谱的长度和独特的单词。在检查数据时,我发现许多作者参考了其他的 url,在那里他们获得了食谱的灵感,我从文本中删除了这些“单词”。我还通过使用 NLTK 语料库删除停用词来标记菜谱。然而,许多作者描述了他们自己的想法和过程,因此在训练语言模型时,删除停用词“我”和“我”会导致语法问题;我在文中保留了这些停用词。

def tokenize(text):
  punctuation_map = str.maketrans(‘’, ‘’, string.punctuation)
  stopwords_list = stopwords.words(‘english’)
  stopwords_list.remove(‘i’)
  stopwords_list.remove(‘me’)
  stopwords_list.append(‘com’)
  stopwords_set = set(stopwords_list)
  text = text.split()
  # remove website links in text
  text = [word for word in text if not (‘http’ in word or ‘www’ in word)]
  text = [word.translate(punctuation_map).lower() for word in text]
  tokenized_words = [word for word in text if word not in stopwords_set]
  return tokenized_words

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

食谱的平均长度为 294 个单词,标准差为 618。食谱长度差异很大!它们平均还包含 166 个独特的单词,同样具有 174 个单词的高标准偏差。这种高标准偏差表明尾部很大,事实上,在检查数据时,我发现有几个超过 1200 个单词的食谱扭曲了这些统计数据。一个帖子甚至有> 20000 字!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显示配方长度直方图的代码。(图片由作者提供)

为了获得这些食谱文本所包含内容的可视化表示,我基于食谱中的单词创建了一个单词云。这个包在删除停用词后创建了一个顶部术语的图像。不出所料,最常见的词是“面包”、“面团”、“面包”、“时间”和“水”。我想到的其他一些词是“伸展”、“折叠”和“开始”。从我烤面包的经验来看,时间是一个重要的因素,而且它是一个相当频繁的词。我也很高兴看到拉伸和折叠,因为这是一种在面团中发展力量的常见技术,很多人似乎都在使用它!令人惊讶的是,发酵剂出现了,但“酵母”一词却没有出现,因为面包可以用野生酵母发酵剂和标准商业烘焙酵母发酵。似乎新鲜面包的使用者,像我一样,更喜欢用酸面团发酵剂来发酵他们的面包,并哄出有趣的味道,因为它的野性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字云从菜谱的正文中生成。(图片由作者提供)

从数量上来说,我把所有的单词列了一个长长的清单,并计算了每个单词出现的次数,从而画出了食谱中最常见的 20 个单词。和上面的单词“云”一样,我们在这个常用术语列表中看到了“面团”、“面粉”、“水”和时间单位。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

显示食谱中出现的前 20 个单词的频率的直方图。(图片由作者提供)

唷——这么多东西!前往我的网站查看第二部分和第三部分以了解更多关于数据集的信息,以及我如何训练一个告诉我如何制作面包的神经网络:-)

原载于 2020 年 7 月 22 日作者博客

神经网络生成超级英雄标志

原文:https://towardsdatascience.com/neural-network-generating-superhero-logo-c86f931c9cf1?source=collection_archive---------56-----------------------

使用多层感知器创建一个标志,并可视化参数如何影响你的模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Teo ZacUnsplash 上拍摄

机器学习是计算机科学领域的超级力量。多亏了推荐系统,我们可以用它来预测未来,通过检测和分类物体让机器人看到东西,或者找到符合我们口味的产品和内容。

当更强大的深度学习方法被发现时,我们获得了能够实现几乎神奇结果的工具。生成看起来像真的一样的人造图像,或者转换风格以生成自己版本的杰作,激发了我们的想象力和创造力。

创造性地使用神经网络刺激我们的动机和学习过程。即使我们有先进的生成模型,也有办法使用简单、经典、多层的神经网络来生成视觉内容,并使用它来描述模型如何工作。所以,让我们发挥创意,制作我们自己的超级英雄标志吧!

数据优先

数据科学模型需要数据的支持。该核心组件定义了模型的行为,是人工大脑的基础。我们自己的超级英雄标志的种子将被编码在传统的二维点阵中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2D 点网格(作者图片)。

这是我们的训练数据集。它由 627 个点x,y 坐标, 一个标号 。标签有两种类型 01

这些数据代表了什么?我希望我的神经网络经过适当的训练后能给我们看,但我们先介绍一下我们的模型。

船长神经网络

这个想法很简单。我们将使用一个三层神经网络。它由一个输入层和一个将数据点传递给隐藏层的组成。这里我们有神经元具有的激活功能:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乙状结肠激活功能(图片由作者提供)。

隐藏层的神经元有两个权重和一个偏差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

隐层神经元方案(图片由作者提供)。

最后,最后一层将使用隐藏层神经元的输出,并为我们的点生成标签。因为我们只有两个可能的标签 ,所以一个输出神经元 就足够了。

看看我们的模型:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3 层神经网络(图片由作者提供)。

训练任务

有了我们的数据和神经网络模型,我们可以开始训练过程。让我们试试最简单的方法:

  1. 按原样使用数据。
  2. 40 个 隐藏起来的神经元。
  3. 使用范围 (-0.2,0.2) 中接近 0 的随机值初始化神经元权重。
  4. 将每个数据点 呈现 1 000 次(1000 次训练迭代)。

在训练过程之后,我们将要求我们的神经网络为训练集中的每个数据点分配标签。然后我们将使用不同的颜色为标签 01 绘制点。如果模型从我们的数据中学习模式,我们应该看到一个超级英雄标志。

让我们检查一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

神经网络未能学习模式(图片由作者提供)。

哎呀,看起来不太好。神经网络没有很好地将想法包含在数据中。

*根本原因是什么?有几个可能的问题。首先,我们的 数据不是归一化的 。我们为网络提供从 -8.0 到 *8.0 的坐标。当我们使用 sigmoid 激活函数时,它应该更适合范围 (0,1)内的数据。

然而,看着 均方误差【2】,及其下降趋势我们也可以尝试增加训练迭代的次数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每次迭代的均方误差(图片由作者提供)。

更多迭代

为了检查网络是否需要更多的时间来学习模式,让我们给它一个机会。让它疯狂地运行 40 000 次迭代,看看会发生什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正确分类的训练集(图片由作者提供)。

你能在图片中看到熟悉的东西吗?想想最著名的漫画人物之一。那个很黑,喜欢在晚上工作的人。让我来帮你:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

分类训练集和“蝙蝠侠曲线”(图片由作者提供)。

没错,就是蝙蝠侠标志!

蝙蝠侠曲线

我的数据集背后的秘密已经被揭示了。我用这些公式[3]构建了它:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“蝙蝠侠曲线”公式(图片由作者提供)。

我到底是怎么用的?我的代码通过一个小步长 (0.1) 在一个坐标系统中迭代点。如果该点在曲线内,则标记为 1 。否则,点被标记为 0。

神经网络学会了如何区分曲线内的点和曲线外的点,这很好。然而,有两个问题:

  1. 这不是我自己的标志,蝙蝠侠标志已经有人用了。
  2. 神经网络在训练集上表现很好,这不是什么大事。

是时候解决这两个问题了。

测试任务

为了让神经网络生成原始徽标,我将生成第二个点网格。然而,这一次它将是一个真正的厚网格。更何况,每个点都不会被分配标签。

相反,已经训练好的神经网络将被用来为更粗的网格生成标签。这个时间网格由 26 000 个 点组成。给定点不是训练集(627 点)的一部分的概率相当高。

在迭代每个点并获得神经网络预测的标签后,我们可以绘制结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由神经网络生成的新标志(图片由作者提供)。

我们拿到了。但是哪个超级英雄会用它呢?飞鼠人?或者更像是象人?我会把它留给你的想象力。

生成徽标的整个过程

让我们总结一下如何生成徽标:

  1. 找到一个模式或公式,它将作为你形象的基础。使用点的坐标作为神经网络的输入。不同区域的不同标签对你的最终形象至关重要。让训练集网格不要那么粗,这样你的神经网络就有了一些空间 在未知领域有创意
  2. 生成一个更粗的网格作为你的测试集。这次不要给这些点贴标签。
  3. 训练你的神经网络。
  4. 使用不同的颜色为测试设定点和标绘点生成不同的标签。
  5. 检查结果。如果不喜欢,就玩玩神经网络参数,看看对最终结果有什么影响。

Octave 代码以及用于运行这些实验的数据可以在这里获得[4]。

看看三个基于 " 蝙蝠侠曲线的 " 标识的例子,通过玩弄神经网络参数生成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不同神经网络生成的 Logos(图片由作者提供)。

让它有趣

数据科学和学习可能很有趣。通过寻找利用科学的创造性方法,你可以鼓励自己学习更多,并且更好地理解事物是如何工作的。

视觉形式甚至更吸引我们的想象力,因为我们使用不同的感官来获得我们试图完成或学习的大部分事情。欢迎您更改一些神经元、期望误差以及许多其他参数,并立即查看它如何影响最终结果。

记住,权力越大,责任越大。如果你有一个能激发好奇心的想法,不要犹豫,分享它吧!

参考书目:

  1. Joel Grus,数据科学从零开始,第二版,ISBN:978–1492041139
  2. https://en.wikipedia.org/wiki/Mean_squared_error
  3. https://www.desmos.com/calculator/dnzfajfpym
  4. https://github.com/rauluka/mluvr-logo

神经网络+遗传算法+博弈= ❤

原文:https://towardsdatascience.com/neural-network-genetic-algorithm-game-15320b3a44e3?source=collection_archive---------11-----------------------

我就是这样创造了一个完全打败这个游戏的人工智能!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

人工智能玩游戏

游戏:规则和移动

首先,我来描述一下这个游戏。你可能已经从 gif 中猜到了,这个游戏的目标是避开红色的栅栏,让绿色的生物向前移动。你走得越远,你的分数就越高。为了让游戏更真实,我实现了重力,这意味着如果生物向上移动,它必须以给定的加速度向下移动。但是它怎么/什么时候跳呢?为了能够跳跃,它必须在地面上。在这个位置,生物可以对地面施加作用力,地面会对其施加反作用力。这种反应会帮助它跳跃(就像我们如何跳跃一样)。这个力的 x 分量将在 x 方向产生一个加速度,y 方向也是如此。

注意:为了简单起见,我没有实现动作-反应机制,而是只处理加速度。当生物在地面上时,它可以决定它的 x 和 y 加速度!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

跳跃物理学

挑战是找到这些加速度的值,这样它就可以安全地跳过下一个红色条!需要注意的是,当它在空中时,它不能改变自己的速度(为什么?留给读者)。与地面的碰撞是非弹性的,因此它不会自动反弹。

构建人工智能

有许多方法可以解决这类问题。在这里,我应用了一种叫做神经进化的东西,它是神经网络遗传算法的组合。

一.神经网络

为了能够‘思考’(何时如何跳跃),这种生物需要某种决策模型。在我的方法中,我用一个神经网络作为我们小朋友的大脑。我在输入层使用了一个包含 6 节点的小 nn,在隐藏层使用了 8 ,在输出层使用了 2 。但是在那些 6 输入节点中有什么,在 2 输出节点中有什么呢?我们先来看输出节点。 2 节点决定两个方向的加速度值。正如我之前所说的,这个生物只需要决定它的 x 和 y 加速度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的神经网络的结构显示了输入特征和输出

对于输入节点,可能有许多组可能的特征。目的是向大脑提供尽可能多的关于生物当前状态及其周围环境的信息。我正在使用这 6 条信息(你能想出一套更好的功能吗?)

二。遗传算法

顾名思义,和遗传有关。这是一种进化算法,我们试图模仿生物进化来找到一个给定问题的最优解。我们从一组解决方案开始,从中选择最好的,并让它们发展。不严格地说,每种遗传算法都遵循 5 的步骤。

  • 初始群体:解的初始集合。每个解决方案都有特定的基因(一组参数)决定其行为。基因在个体之间有所不同,这被称为变异

注意:如果初始种群没有变化,那么每个解都会以完全相同的方式进化,我们将无法探索其他解!

  • **适应度函数:**一个数学函数,通过给每个解决方案分配一个适应度分数来确定一个解决方案有多适合(最优)。这将有助于下一步。
  • **选择:**在这一步,我们选择最适合的个体,让他们把自己的遗传信息传递给下一代。
  • **交叉:**结合两个(或更多)父母的基因,产生下一代的一个个体。
  • **突变:**当遗传信息从当前一代传递到下一代时,很小比例的信息被随机改变。

注意:由于突变,一些新的特征(属性)将被引入,这将“有希望”使我们的解决方案更加优化。希望如此,因为变异是随机的,也会产生负面影响!

三。神经网络与遗传算法的结合

现在是大揭露的时候了。你会如何结合这两种完全不同的算法?主要思想是将神经网络(大脑)的权重视为基因。最初,我们从一群 250 个 生物开始,每个生物都有自己独立的大脑。为了使群体有变化,我们随机初始化这些神经网络的权重。我们将把最好的砝码传给下一代。你如何决定哪种球更好?我们将使用体能分数。在我的例子中,适应度分数是生物走过的距离的线性函数。所以,走过最远距离的生物有更大的概率创造后代。因此,它们的神经网络的权重将传递给下一代。现在,让我在这里提几个细节…

I)我没有使用交叉的概念,所以一个生物可以不与另一个生物交配而创造它的后代。

ii)创造后代(在这种情况下)意味着复制一个生物神经网络的重量,并在添加一些突变后用前一个生物的重量制造一个新的。

iii)变异只不过是少量随机改变一小部分(一般小于***【2%】***)权重。

一遍又一遍地做这个过程模仿生物进化,经过许多代,我们希望获得一些具有最佳重量的生物。换句话说,经过许多代之后,我们会有一些小家伙可以决定 x 和 y 加速度的值,这样它就可以跳过下一个红条。在机器学习方面,我们已经成功训练了我们的模型:D

但是我们从来没有使用反向传播!

在传统的深度学习中,我们使用基于梯度的优化技术(也称为反向传播)来训练神经网络。在这种情况下,我们采用最后一层的误差,并将其向后传播,在每一层中,我们计算梯度,并基于此改变相应层的权重。但是在这种情况下(GA+NN)我们不能进行反向投影。为什么?因为我们不能从最后一层计算误差(因为我们不知道地面真相)。我们完全依赖选择和变异来学习。

想看人工智能学习吗?下面是视频…

访问 web 应用程序…

【https://suji04.github.io/jumpingameAI/

游戏和人工智能的代码…

https://github.com/Suji04/jumpingameAI

如果你想了解更多关于遗传算法的知识,请查看以下资源:

  • GA上的编码列车播放列表。我用过他的 GA 实现。
  • 进化计算简介作者 A.E. Eiben & J.E. Smith。

我希望你喜欢阅读。下次见…学习愉快!

神经网络:其内部功能和用途

原文:https://towardsdatascience.com/neural-network-its-internal-functioning-and-uses-7adc4d37f3d8?source=collection_archive---------40-----------------------

神经网络试图复制人类大脑及其神经元网络。ANN 人工神经网络由人工神经元或节点组成。人工神经网络主要用于解决人工智能(AI)问题。

当人脑从提供给它的信息中学习时,神经网络也做同样的事情。

神经元之间的连接被建模为权重。正值被称为令人兴奋的连接,而负值意味着避免连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个神经元来源

在神经网络中,工作分两步完成:

1)所有输入乘以一个权重并求和。此活动类似于线性方程,并添加一个偏差作为 b,y=∑xw+b。

2)激活函数被应用于输出,该输出决定该神经元在最终决策中是否将是激活的。例如,可接受的输出范围通常介于 0 和 1 之间,也可能是 1 和 1 或 0 或 1,具体取决于所用的激活函数,可能是 Sigmoid、tanh 或 ReLu。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这些人工网络可用于预测建模,在数据集上进行训练。从经验中产生的自我学习可以发生在网络中,这有助于在数据集中看不到的重要问题上得出结论。

神经网络的应用

神经网络用于人工智能的各个领域,例如:

1)用时间序列对金融数据进行预测建模。

2)模式和序列识别中的分类。

3)聚类和过滤。

一个简单的神经网络有一个输入层,隐藏层和输出层。更复杂的神经网络或深层多层网络可以具有大量的隐藏层,在这些隐藏层中,计算具有权重和偏差的输入的乘积的总和,并且在第二步中,关于所使用的函数执行激活。

在这里,我要解释一个 3 隐藏分层网络,前向传播和反向传播。

神经网络中的前向传播

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在前向传播中,来自每个输入单元的输入被加载一些权重。在每个隐藏神经元层中,完成 2 个步骤:

  1. x1 *w1 +b1,取权重和输入的乘积并加到偏差 b

2)激活功能应用于步骤 1 中的输出。o1=Act(x1 *w1 +b1)。

在隐藏的第 2 层中,输入将从第 1 层输出,即 o1,并且对于上层神经元,它将乘以 w2,对于下层神经元,它将乘以 w3,并且将偏置加到每一个上。

O2 = Act(O1 * w2+B2 ), O3 = Act(O1 * w3+B3)

在隐藏层 3 中,2 个输入将作为 o2 和 o3 到来,它们将分别乘以权重 w5 和 w4 并相加。

o5= Act((o2* w5 + o3*w4) +b4)

y=Act(o5*w6+b5)

考虑到预测值和实际值的简单相减,损失计算为 y-y^。

神经网络中的反向传播

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们在神经网络中进行反向传播,以找到更新的权重值,这反过来有助于最小化损失。

这也是一种将反馈传播到神经网络中的方式,以了解每个节点对多少损失负责,并依次更新权重,从而通过给节点更高或更低的权重来最小化损失。

梯度是一种数值计算,它帮助我们知道如何调整网络的参数,以使其输出偏差最小化并达到全局最小值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原始图像来源

用于有效训练一个神经网络的算法是通过链规则。在每次向前通过神经网络之后,反向传播会执行一次向后传递,同时调整模型的权重和偏差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

激活功能

在人工神经网络中,节点的输出取决于激活函数,激活函数又根据所用函数的类型使节点开或关、不太活跃或更活跃。

这里我们将讨论几个最常用的激活函数,如 Sigmoid、tanh 和 ReLu。

乙状结肠激活功能

它是一个数学函数,具有典型的“S”形曲线或S 形曲线。sigmoid 函数的一个常见示例是逻辑函数。

公式如图所示。

该函数确保将神经元的输出值保持在 0 到 1 之间。

然而,它的导数范围在 0 到 0.25 之间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

该函数可以用作不是很深的神经网络中的激活函数,即其中隐藏层的数量不是很大,因为如果层数更多,将导致消失梯度问题。

消失梯度问题是当等式 w1 new = w1 old-ƞƌl/("ƌw1old 中的(ƞ“ƌl”/("ƌ“w1old))的值很小时,得到的新权重几乎与旧权重相似,因此不进行权重更新。

这导致梯度下降中的值处于相同的位置,不会向全局最小值前进。

下面的等式显示了消失梯度是一个怎样的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

Tanh 激活功能

该激活函数具有与 sigmoid 相似的功能,其公式如下。在此函数中,输出值介于-1 到 1 之间,其导数范围为 0 到 1。

如上所述,它也有消失梯度问题,但它比 Sigmoid 好。

然而,在与非常深的神经网络一起工作时,它也开始出现问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

ReLu 激活功能

在这个函数中,输出的值是 0 或 1,这意味着它或者去激活神经元或者激活它。

它的公式很简单,如下所示。

这没有消失梯度的问题,因为数字是 0 或 1,但它可能会导致死亡的神经元。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

结论

我希望在读完这篇文章后,关于神经网络,它的工作以及为什么需要这些,很多事情一定是清楚的。

还有最常用的激活函数以及它们的优缺点。

这只是为了让学习者简单起见的一个概述。

感谢阅读!

原载于 2020 年 10 月 30 日 https://www.numpyninja.com

神经网络:为什么越深并不总是越好

原文:https://towardsdatascience.com/neural-network-why-deeper-isnt-always-better-2f862f40e2c4?source=collection_archive---------39-----------------------

一个简单的例子来理解隐藏层如何工作

当创建神经网络时,人们不得不问:需要多少个隐藏层,以及每层需要多少个神经元?

当创建神经网络时,人们不得不问:需要多少个隐藏层,以及每层需要多少个神经元?

当涉及到复杂的真实数据时,吴恩达在 Coursera 的课程中建议: 改进深度神经网络 ,这是一个高度迭代的过程,因此我们必须运行许多测试来找到最佳的超参数。

但是,隐藏层神经元如何影响最终模型背后的直觉是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Moritz KindlerUnsplash 拍摄

简单非线性可分数据

让我们使用 make_circles 创建一个数据集。

from sklearn import datasetsX,y=datasets.make_circles(n_samples=200,shuffle=True, noise=0.1,random_state=None, factor=0.1)

你可以将数据集可视化:

import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=y,s=20)
plt.axis(‘equal’)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

有多少神经元和层数?

每个神经元创建一个线性决策边界。通过查看数据集,直觉是创建一个由 3 个神经元组成的层。我们应该能够创建一个完美的分类器。现在,如果只有两个神经元呢?这似乎还不够,如果我们尝试添加更多的层呢?

带着这些问题,我们试着做一些测试。

一个隐藏层中有 3 个神经元

如果我们使用 3 个神经元,代码如下:

from sklearn.neural_network import MLPClassifierclf =MLPClassifier(solver=’lbfgs’,hidden_layer_sizes(3,),
activation=”tanh”,max_iter=1000)clf.fit(X, y)
clf.score(X,y)

然后,我们能够在隐藏层内创建 3 个决策边界。并且我们可以注意到,创建这 3 条线有无限多种可能性(所以在这个神经网络的代价函数中有无限多种全局最小值)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

为了创建隐藏层的决策边界的可视化,我们可以使用隐藏层的系数和截距。

n_neurons=3xdecseq=np.repeat(np.linspace(-1,1,100),n_neurons).reshape(-1,n_neurons)ydecseq=-(xdecseq*clf.coefs_[0][0]+clf.intercepts_[0])/clf.coefs_[0][1]

然后我们可以用原始数据集绘制这三条线:

fig, ax = plt.subplots(figsize=(8,8))ax.scatter(X[:, 0], X[:, 1], c=y,s=20)ax.plot(xdecseq[:, 0], ydecseq[:, 0])
ax.plot(xdecseq[:, 1], ydecseq[:, 1])
ax.plot(xdecseq[:, 2], ydecseq[:, 2])ax.set_xlim(-1.5, 1.5)
ax.set_ylim(-1.5, 1.5)

一个隐藏层中的两个神经元

如果我们只使用 2 个神经元,很容易看出我们将不能完美地对所有观察结果进行分类。

使用类似的代码,我们可以绘制出下图,其中包含隐藏层的两个决策边界。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

2 个神经元,每个神经元有许多层

如果我们在许多隐藏层中创建 2 个神经元会怎么样?为了更好地理解在第一个有 2 个神经元的隐藏层中发生了什么,我创建了这个可视化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

很明显,无论你添加多少层,你都无法对下面红圈里的数据进行分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

可以自测一下:可以在参数 hidden_layer_sizes 中添加更多的图层。例如,( 2,3,2)表示 3 个隐藏层,每个层有 2、3 和 2 个神经元。

from sklearn.neural_network import MLPClassifierclf = MLPClassifier(solver=’lbfgs’,
hidden_layer_sizes=(2,3,2),
activation=”tanh”,max_iter=1000)clf.fit(X, y)
clf.score(X,y)

结论

从这个简单的例子中,我们可以用这个直觉来结束:

  • 第一个隐藏层中神经元的数量创建尽可能多的线性决策边界来对原始数据进行分类。
  • 如果第一层不包含必要数量的神经元,那么(理论上)创建更深的神经网络是没有帮助的。

如果想看其他动画了解神经网络是如何工作的,也可以看看这篇文章。

[## 神经网络转换数据的动画

我们可以对神经网络为什么以及如何工作有更好的直觉

towardsdatascience.com](/animations-of-neural-networks-transforming-data-42005e8fffd9)

神经网络和疟疾

原文:https://towardsdatascience.com/neural-networks-and-malaria-520a5b7fb6ed?source=collection_archive---------91-----------------------

生殖敌对网络和蚊子有什么关系

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

学分像素海湾

本文在简要回顾了疟疾和生殖神经网络(GANs)之后。我们深入研究了神经网络在血液涂片中检测疟疾疟原虫的可能应用,以及如何使用 GANs 生成用于人类训练和数据增强的合成血液涂片图像。特别地,所使用的架构的细节被讨论为上采样和 TensorLayer 的使用,而不是 Keras。

今年的特点是新冠肺炎和疫情。然而,在南半球疟疾造成的死亡人数超过了新冠肺炎,即使它没有造成死亡,它也代表着人们在失去工作天数或其他机会方面的负担(世卫组织 2018–2020)。

疟疾 是一种蚊子传播的疾病,如果不治疗,会导致发烧、疲劳、头痛,最终死亡。根除疟疾在一些国家已经成为可能,但在大多数低收入国家却很麻烦。可以比喻为一个人减肥。不存在一个普遍的模式,每个国家都有自己的问题,由于基础设施、环境和其他因素,在一个国家行得通的方法在另一个国家可能行不通。在应对疟疾的方法中,早期诊断发挥着关键作用。最常见的诊断方法仍然是显微镜检查,这仅限于研究者的经验,研究者之间的协变性也是存在的( Zimmerman et al. 2015 )。其他方法有快速检测(RDT)和聚合酶链反应(PCR)。RDT 价格低廉,但当寄生虫数量高于 50,000–200,000/mL 全血时,可以检测出疾病。基于 PCR 的测试是最准确的,因为它们甚至可以在血液中少于 1000 个寄生虫/mL 的情况下诊断病情,但是它需要非常有经验的人员。因此,在低收入国家,主要的实际应用仍然是显微镜血液涂片分析。血液涂片是通过在手指上切一个小口,然后在载玻片上使用染色剂来表征疟原虫的存在而获得的。涂片也可以是“厚的”或“薄的”,这取决于血滴是否在载玻片上扩散。厚血涂片主要用于检测寄生虫的存在,因为它们检查更大的血液样本。血液在载玻片上扩散的薄涂片允许分析更少的血液,但导致更高的准确性,并允许区分寄生虫菌株。

深度学习在组织病理学图像分析中的应用正在彻底改变该领域,通过以高准确度评估疾病进展,提供在从癌症分析到免疫疾病( Niazi et al. 2019) 的多个领域中有效的定量模型。此外,人们相信人工智能将把数字病理学扩展到远远超出今天可能达到的程度。关于疟疾和光幕显微术,过去已经有了几种方法。一般来说,他们专注于背景-前景减法、特征提取,以及通过支持向量机(SVM)或随机森林( Das et al. 2013 )的进一步分类。在深度学习时代,已经研究了几种架构(董等 2017)

事实上,如下所示,通过使用深度学习库,如 Tensorflow 和重新训练的 VGG,即使只使用 10 个样本进行训练,也有可能获得 0.9 的曲线下面积的良好结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来自 Makere 大学的厚涂片图像,由 Rija Ramarolahy 分割(参见 Ramarolahy 和克里米)

生成式广告网络是一种特殊的架构,它可以生成数据,而不仅仅是对数据进行分类。解释它们最简单的方法是考虑两个相互竞争的系统:一个发生器和一个鉴别器。他们可以被看作是骗子印刷假币和银行职员检查验证货币,前者试图创造最真实的假币,后者更善于区分假币和真币。GANs 架构已经达到了令人难以置信的精确水平(瓦罐肯定会赢)。下图显示了名为 BigGAN 的 GAN 架构的结果,该架构的初始得分(IS)为 166.3。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

比根生成的合成图片

在病理学中使用 GANs 的动机是与数据扩充相关的两个主要因素:1)为病理学家学习研究中图像的可能变化提供可变性,2)允许更好的迁移学习以增加更多图像。因此,一个完整的深度学习工具应该包括鉴别器和生成器部分,以使鉴别器也受益( van Eyke et al. 2019 )。

我们使用传统的深度卷积架构如下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

典型的 DCGAN 架构【https://arxiv.org/abs/1511.06434

这些是生成器的 1000 次迭代,创建与顶部真实图像相似的图像(输出 256x256 像素)

我们遇到了 GAN 生成图像的典型困难。首先,由于鉴别器的收敛速度比发生器快,通常很难产生真实的图像。一种解决方案是给出较小的学习率,例如(学习率鉴别器 0.00001 和生成器 0.0002),替代的技巧包括使用软标签来促进生成器的收敛。

一个更重要的细节是如何执行扩展步骤,因为可能会出现典型的棋盘伪影。所采用的解决方案是简单地切换出标准去卷积层,用于最近邻尺寸调整,随后卷积导致不同频率的伪像消失(萨利曼等人,2016 )。

这些视频展示了使用 GAN 的结果

去卷积(上)和最近邻调整大小(下)生成一个受疟疾疟原虫感染的单细胞。最近邻调整大小在质量上有明显的影响。

此外,建议的架构是使用 TensorLayer 作为 Keras 的替代方案来实现的。Keras 是一个构建在 Theano 或 TensorFlow 之上的高级库。关键思想是通过快速原型化来促进实验,而不特别偏好特定的库,它被认为是 TensorFlow 的可靠抽象。因此,Keras 可能是最容易的选择。然而,Keras 在 TensorFlow 后端相对较低的性能不时被其用户提及,这可能与 Keras 最初为 Theano 设计有关。

因此,TensorLayer 与最近(2016 年)发布的 Keras 相比更加透明,因为它是直接为 TensorFlow 构建的,但目前其社区相对较小。下面显示了使用 TensorLayer 的代码片段

完整使用的代码可在https://github . com/Alec rimi/malaria _ detection _ and _ generation上获得

总之,数字病理学是一个新兴领域,它强烈使用深度学习和人工神经网络来检测血液涂片中的疟原虫。在这篇文章中,还显示了 GANs 可用于生成看起来逼真的合成感染血液涂片,并可用于增加关于病原体如何不同地出现的人类训练,以及用于进一步数据分析的数据扩充。此外,将来 GANs 可能会教给我们一些我们从组织学/病理学中所不知道的东西。我们正在努力使低收入国家也能获得这种服务。这是一个视频演示:

想连接就连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@ Dr _ Alex _ 克里米

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@阿列克里米博士

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www.linkedin.com/in/alecrimi/

神经网络和通用逼近定理

原文:https://towardsdatascience.com/neural-networks-and-the-universal-approximation-theorem-8a389a33d30a?source=collection_archive---------6-----------------------

以及最近深度神经网络的繁荣

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Alex Kotliarskyi 在 Unsplash 上的照片

神经网络的概念已经存在了几十年。为什么要花这么长时间来加快步伐?神经网络和深度学习创造的这种突然繁荣是什么?是什么让神经网络如此值得炒作?我们来探索一下。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

神经网络的架构

为了得到什么是神经网络的简要概述,神经网络仅仅是神经元(也称为激活)的集合,这些神经元通过不同的层连接。在提供训练集的情况下,它试图学习输入数据到输出数据的映射。

神经网络的 训练 之后便于其对同一分布的测试数据进行预测。这种映射是通过分布在不同层上的一组称为 权重 的可训练参数来实现的。权重是由目的是最小化损失函数的反向传播算法学习的*。损失函数测量网络所做的预测与实际值有多远*。神经网络中的每一层后面都有一个激活层,它对神经元执行一些额外的操作。**

通用逼近定理

从数学上讲,任何神经网络架构都是以寻找任何能够将属性(x)映射到输出(y)的数学函数 y= f(x)为目标。该函数(即映射)的准确性取决于数据集的分布和所采用的网络架构。函数 f(x)可以是任意复杂的。普适逼近定理告诉我们,神经网络有一种 普适性 即无论 f(x)是什么,都有一个网络可以近似逼近结果并完成工作!这个结果适用于任何数量的输入和输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像来源

如果我们观察上面的神经网络,考虑到作为身高和宽度提供的输入属性,我们的工作就是预测这个人的性别。如果我们从上述网络中排除所有激活层,我们认识到 h₁是重量和高度与参数 w₁、w₂和偏差项 b₁.的线性函数因此从数学上来说,

h₁ = w₁weight + w₂height + b₁

类似地,

h2 = w₃weight + w₄height + b₂

沿着这些思路,我们认识到 o1 也是 h₁和 h2 的线性函数,因此也线性依赖于输入属性体重和身高。这本质上归结为一个线性回归模型。一个线性函数足以逼近通用逼近定理吗?答案是否定的。这就是激活层发挥作用的地方。

激活层紧接在神经网络中的线性层之后,以提供非线性。非线性有助于神经网络执行更复杂的任务。激活层对激活(h₁,在这种情况下是 h2)进行操作,并根据为该特定激活层提供的激活函数修改它们。激活函数通常是非线性的,除了身份函数。一些常用的激活函数有 ReLusigmoidsoftmax 等。随着非线性和线性项的引入,对于神经网络来说,在这种情况下,在具有适当的 parameters(w₁、w₂、b₁等的基础上近似地模拟任何给定的函数成为可能。参数适当地收敛到适当性。你可以从这里更好地了解数学上的通用逼近定理。

神经网络具有映射复杂函数的能力,并且永远是纸上谈兵。是什么让它突然成了机器学习的神童?

繁荣

最近对深度学习模型的兴趣爆发归功于当今世界提供的高计算资源和丰富的数据。深度神经网络是数据饥渴模型。这种繁荣也主要归功于普通人手中的廉价高速计算。这种前所未有的数据增长和计算能力几乎在生活的所有领域创造了奇迹。

深度学习模型被坚定地认为可以自动从原始数据中提取特征,这一概念也被称为特征学习。无论你向一个足够大和足够深的神经网络输入什么,它都可以学习隐藏的特征和属性之间的关系,然后利用这些关系来预测结果。这非常方便,只需要最少的数据预处理。与此同时,用于设计和构建这些数据驱动模型的工具和框架(PyTorch、Tensorflow、Theano)与日俱增,水平相当高,并且很容易获得。它们要求对编程语言有一个微不足道的低级理解。最重要的是,顶级公司的研究证明,这个领域确实值得花费宝贵的时间和金钱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用数据缩放的模型

深度学习模型确实可以随着数据进行扩展,这一点备受好评。这表明,随着数据的增加和采用更大的模型,结果几乎总是会变得更好。这些更大的模型需要更多的计算来训练。随着如今易于访问的有益计算环境的出现,实时实验和改进算法和架构变得更加容易,从而在短时间内产生越来越好的实践。也就是说,深度神经网络在许多领域都有广泛的应用,如计算机视觉、自然语言处理、推荐系统等等。各种跨领域的应用程序最近也加快了步伐。

2019 年 10 月,谷歌公布了其 54 量子位处理器“Sycamore”的量子优势实验结果。量子计算机在 200 秒内完成目标计算,这对世界上最快的超级计算机来说需要大约 1 万年。随着计算能力的日益增长,不知道机器学习何时会超越超人的界限。人们只能推测。

神经网络不会像你认为的那样进行归纳

原文:https://towardsdatascience.com/neural-networks-dont-generalize-the-way-you-think-they-do-de520bed2053?source=collection_archive---------21-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: Unsplash

彩票假说

神经网络是如何学习的?

或者,更具体地说:

神经网络究竟是如何对如此多的参数进行归纳的?

这是一个很好——看似简单——但大多数人都认为理所当然的问题。一个简单的神经网络可以有几千到几万个参数。每个额外的参数提供了额外的自由度,极大地增加了搜索空间。

除了必要的以外,我们不应该增加解释任何事物所需的实体的数量。

众所周知——也是直觉——添加更多的参数可以让模型进一步记住数据点,而不是找到概括。有这么多参数,在数据集上训练的神经网络肯定会采取简单的方法,而不是学习。

人们可能会认为,对于完全随机的标签,一般化的算法会花费更多的时间或更少的成功(想象一下,如果你被告知学习识别带有完全随机标签的图像)。

令人惊讶的是,事实并非如此。

在这篇论文的中,研究人员证明了神经网络可以在完全随机的标签上获得完美的训练分数——而所需的训练时间相同。如果它愿意,神经网络(一个标准的初始架构)可以存储整个数据集(所有的 CIFAR-10)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

a)在各种实验设置上的性能,如随机标签、混洗像素、添加高斯噪声等。b)显示了不同标签损坏率的相对收敛时间。c)具有不同标签损坏率的测试误差(一般化误差,因为测试误差为 0)。来源:张等

不知何故,神经网络在训练集和测试集中产生非常相似的结果。有一个标准的答案:以辍学或 L1/L2 的形式出现的正规化提高了普遍性。

由张等人进行的上述相同研究表明,通过常用方法(如数据扩充、权重衰减和剔除)进行的明确调节并不能减少泛化误差。

在下面的示例中,初始模型是在 CIFAR-10 数据集上训练的,正则化(特别是随机作物数据扩充)有助于提高准确性,但提高幅度不大。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:张等

如果是这样的话——没有正则化的模型并不比正则化的模型表现差多少——我们怎么能说正则化是泛化的基础呢?

此外,如果不是,那么神经网络是如何学习的?

一个答案可能来自神经网络修剪。

随着深度学习变得更加实用,神经网络修剪越来越受到关注。神经网络的大小可以减少五分之五,预测时间减少三分之二,精确度下降 1.2%(此处为)。在更多的工程设计下,有可能移除更多的网络——90%甚至 99%——而不会遭受性能损失。

如果网络的绝大部分贡献了性能增益的一小部分,那么它到底在做什么?监控任何神经网络的权重将显示它们不仅仅是被动的——它们几乎总是异常活跃。

一个答案是彩票假说,它指出:

一个随机初始化的密集神经网络包含一个子网络,该子网络被初始化为当被隔离训练时,它可以在最多相同次数的迭代训练后匹配原始网络的测试精度。

换句话说,神经网络是一个巨大的包裹,里面有微小的产品和大量的填充物。绝大部分价值存在于网络的一小部分——子网中。这篇论文的作者将这些子网称为赢得“初始化彩票”的“中奖彩票”:它们的初始权重值正确,可以促进重要的增长。

然后,解释神经网络如何概括的一种方法是,实际的预测内容占用非常小的空间,但较大的神经网络运行较大的初始化彩票,找到强大子网的机会较高。

也许最重要的问题是:当我们知道神经网络足够好的时候,我们为什么要关心它们为什么要学习呢?

最明显的是,如果我们错误地将神经网络的过度参数化归因于更多的能力,我们正在占用比实际需要多得多的计算能力。如果更大的网络只是为了运行大型初始化实验,显然有更有效的方法来完成这项任务。

神经网络已经被接受为黑盒算法,只是工作时间太长了。如果理解了神经网络的工作方式和原因,深度学习的研究,特别是架构的构建和进一步开发,将会大大加快。

令人惊讶的是,从传统统计学习理论的角度来看,DNNs 在实践中推广得非常好,即使没有显式的正则化。这就提出了一个合适的框架来理解 DNNs 的一般化的问题。
——深度学习中带参数个数的泛化的标度描述,盖格等

在神经网络中,过度拟合的迹象,如训练精度为 100%,可能伴随着类似的高测试精度。这违背了经典机器学习的基本法则。

最近的论文如本文探索了高度参数化模型表现不同的可能性,以及我们需要在深度学习中以不同的方式处理泛化和学习的概念。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

偏差-方差权衡只是故事的一部分吗?来源:贝尔金等人。图片免费分享。

即使围绕深度学习有这么多令人兴奋和慌乱的研究,但它在学习方面的成功并没有普遍的理论,而不仅仅是在建模方面(这可以用通用逼近定理来解释)。然而,彩票假说是理解这一点的重要一步。

神经网络集成

原文:https://towardsdatascience.com/neural-networks-ensemble-33f33bea7df3?source=collection_archive---------10-----------------------

结合深度学习模型的不同方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

诺亚·罗森菲尔德在 Unsplash 上的照片

集合的概念在机器学习中很常见。不同的算法建立在这个机制上。仅举最著名的例子,随机森林用来组合可变数量的决策树。一般来说,集成可以被认为是一种学习技术,其中许多模型被结合起来解决一个问题。这样做是因为集成往往比单个执行得更好,提高了泛化能力。

合奏的方式没有任何限制。考虑的模型的数量和类型也是如此。要记住的习惯是选择低偏差和高方差的元件。这是可能的,只需选择具有多样化结构和格式的模型。

在这篇文章中,我们将集成机制应用于神经网络领域。更准确地说,我们提出了有效组合深度学习结构的各种方法。我们在图像分类领域举了一个例子,在这个领域中经常会遇到非常深的模型。同样的推理和过程也可以很容易地翻译成其他应用程序。

数据

我们从 Kaggle 收集数据。垃圾分类数据集包含 6 种分类:纸板、玻璃、金属、纸张、塑料和垃圾。还提供了对训练、验证和测试的划分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每个班级的数据样本

我们的目标是尝试按照神经网络集成方法对我们的图像进行正确分类。更详细地说,我们提出 3 种不同的方法。我们所有的方法都遵循相同的结构,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有 N 个网络分类器,它们以不同的方式组合在顶部。在这个例子中,我们选择 3 个不同的分类器进行集成。它们是在不同数据集上预先训练的模型,但我们在任务中会重复使用它们。众所周知,这是图像分类领域的一种常见方法,其中大型模型适用于非常庞大的数据集,以便冻结它们的知识并将其重新导入其他场景。迁移学习的优点正是在正确的方向上初始化我们的新训练,适应先前学习的信息以获得更好的结果。这可以对我们的特定数据进行微调。在我们的上下文中,当我们合并 N 个系综组件时,我们对它们应用微调来操作系综。

在提出的所有方法中,我们使用 VGG16、VGG19 和 RESNET50 作为基本模型来操作系综。我们对它们进行微调,允许在它们各自的最后卷积块上进行重新训练。集合在 2D 维度上操作。我们从 3D 过渡到 2D 经营全球联营。对于通过具有固定维数的密集层中的汇集输出的所有网络,维数是相等的。

拼接系综

串联是合并不同数据源的最常见技术。串联系综接收不同的输入,不管它们的维度是什么,并且在给定的轴上串联它们。并排附加信息的缺点可能是维数爆炸。系综中的网络越多或越大,密集维度就越大,连接的输出就越大。这种操作可能是分散的,不允许网络的最后部分学习重要信息或导致过拟合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的串联系综在测试数据上达到了 89%的准确率。

平均系综

平均系综可以被视为级联操作的相反。我们网络的汇集输出通过具有固定数量神经元的密集层,以使它们均衡。这样,我们可以计算平均值。结果是输出共享每个输入的相同维度,但这是它们的平均值。可以直观地理解,这种方法的缺点是平均运算的性质会导致信息丢失。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的平均系综在测试数据上达到了 89%的准确率。

加权系综

加权系综是一种特殊形式的平均运算,其中张量输出乘以权重,然后线性组合。来自我们模型的每个输入都被赋予一个权重。这些权重决定了每个模型对最终结果的贡献。特殊性在于这些权重不是固定的,也不是预先设定的,但是它们的值可以在训练过程中进行优化。唯一的约束是权重的总和必须为 1,但这很容易通过对它们应用 softmax 来实现。利用这种类型的集成,我们还可以通过提取集成权重来检索每个模型的贡献。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的加权集成在测试数据上达到了 89%的准确率。

摘要

在这篇文章中,我们介绍了一些类型的神经网络集成技术。最大的潜力是可以很容易地用其他操作来扩展它们。我们还将它们应用于分类问题的大型模型,但是没有什么可以阻止我们将它们应用于我们的定制模型场景中。我们还在微调操作过程中开发系综,但此处程序也可分为子任务。所有这些方法的最大好处是增加多样化,以便建立能够更好地概括的模型。

查看我的 GITHUB 回购

保持联系: Linkedin

神经网络:你想知道的一切

原文:https://towardsdatascience.com/neural-networks-everything-you-wanted-to-know-327b78b730ab?source=collection_archive---------23-----------------------

学习深度学习模型核心背后的数学!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 Unsplash

介绍

这篇文章的目标是:

  • 简要介绍什么是神经网络以及它们是如何工作的
  • 对他们如何学习做出详细的数学解释

神经网络

一般来说,神经网络是一种逼近函数的方法。遵循通用近似定理:

具有单个隐藏层的神经网络足以表示给定值范围内的任何函数,尽管隐藏层可能太大以至于不可能实现或者不可能找到适当的权重。

如果我们考虑到正常情况下你能想到的任何问题都可以以数学函数的形式分解和建模,根据这个定理,神经网络应该可以解决任何问题,对吗?

神经网络有两个主要限制:

  • 它们只能逼近连续函数
  • 并且在一定的数值范围内

粗略地说,有了神经网络,我们可以检测模式,并用它们来解决问题。此外,通过深度神经网络,我们可以转换数据空间,直到我们找到一种有助于实现所需任务的表示。

他们将执行类似于下图所示的操作:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按作者分列的数字

基本上,它们将输入数据转换为其他空间表示,以便能够以更简单的方式区分它。

下面的例子很有代表性:

如果我们试图用线性分类器来解决以下数据集的分类问题,这将非常困难,因为数据点不是线性可分的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按作者分列的数字

我们将获得类似于以下内容的内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按作者分列的数字

但正如我们所看到的,它并不太好。你想看看神经网络的能力吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按作者分列的数字

这看起来好多了。)

神经网络不能做的事情

神经网络不能给出问题的精确解。例如,神经网络很难实现简单的乘法运算。

  • 首先,因为我们需要它的精确值。
  • 第二,因为我们之前说过,它们能够在给定的范围内逼近函数。乘法需要[-inf,+inf]的范围。

此外,他们也不能“思考”。他们只是非常强大的模式检测器,给人以智能的感觉,但他们没有。我们必须自己提供情报。

我们还必须考虑到,虽然它们非常有用,因为它们解决了迄今为止对计算机来说非常复杂的问题,例如检测不同类型的狗品种或交通标志,但很难从中提取知识。

换句话说,他们有能力做我们要求他们做的事情,但是很难发现他们到底是怎么做的。

神经网络是如何学习的?

基本上,神经网络的学习过程类似于人类的学习。他们通过重复学习。

他们看到一些东西,猜测是什么,其他代理告诉他们是否正确。如果他们错了,他们会调整自己的知识,避免重蹈覆辙。

让我们看一个具体的例子

你可能知道,神经网络是由层组成的,而层又是由神经元组成的。

在这个链接中可以看到完整的例子:https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

在下图中,我们可以看到一个前馈型网络,其 iput 层由 2 个神经元组成,隐藏层由 2 个神经元组成,输出层由另外 2 个神经元组成。另外,隐藏层和输出层也有偏差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

还有很多架构,但这是最常用的一种。在这种类型的架构中,I 层的每个神经元都与 i+1 层的所有神经元相连接。

也就是说,一层的神经元只允许连接到下一层的神经元。这些类型的层被称为密集层或全连接层。

为了简单起见,让我们假设我们的训练集只由 1 个元素组成:0.05,0.1,这是 1 类(如果神经元 o1 的概率大于神经元 o2 的概率,则可能是 0 类,或者如果相反,则可能是 1 类)。

在下图中,您可以看到具有随机初始化的权重、输入的训练集元素和所需输出的网络:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

一旦我们的神经网络被定义并准备好接受训练,我们就来关注它们是如何学习的。

两种最常见的学习方法是:

  • 前进传球
  • 反向传播

前进传球

它包括用当前权重值计算网络的输出。为此,我们向网络输入我们的训练元素。

但是,首先,让我们看看神经元到底是怎样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/complete-guide-of-activation-functions-34076 e95d 044

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 fn_activation 是选择的 activation 函数。一些最流行的激活功能有:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/complete-guide-of-activation-functions-34076 e95d 044

人工神经网络和真正的神经网络相似吗?

人工神经网络是受人脑的启发。事实上,我们有大约 100 亿个神经元,每个神经元都与其他 10,000 个神经元相互连接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://training . seer . cancer . gov/anatomy/neural/tissue . html

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

神经元的身体称为胞体,入口称为树突,出口称为轴突。大脑的神奇之处在于一些树突与其他神经元轴突的成千上万个连接。

其工作方式是,每个神经元通过其轴突(输出)和受体的树突(输入)接收来自其他神经元的电化学脉冲。

如果这些脉冲强到足以激活神经元,那么这个神经元就会将脉冲传递给它的连接。通过这样做,每个连接的神经元再次检查从树突到达细胞体的冲动(在我们之前的例子中为 inh1 )是否足够强,以激活神经元( fn_activation 负责检查这一点)并扩展更多的神经元。

考虑到这种操作模式,我们意识到神经元真的就像一个开关:要么传递信息,要么不传递。

神经网络不是基于它们的生物伙伴,而是受到它们的启发。

正向和反向传播

现在,我们将了解网络如何计算输出 outh1。

再看一下网络:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

图像

为了计算 o1 和 o2,我们需要:

对于第一层,即隐藏层:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于最后一层,输出层:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中: o1 = outo1o2 = outo2。

所以我们需要计算:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,要获得 outh1 和 outh2,我们需要应用 fn_activation。在这种情况下,我们选择物流功能作为激活功能:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们看看我们在输出计算过程中的情况:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

我们现在只需要计算 o1 和 o2:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,应用激活函数:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

终于!我们已经计算出我们的神经网络预测!但是坚持住,我们的预测太可怕了!他们不像 0.01 和 0.99 期望!我们如何解决这个问题?

不如我们计算一下总误差,尽量把它减到最小?事实上,这正是反向传播算法所做的:它根据每个权重对总误差的影响程度来更新权重,以便最小化总误差

让我们计算总误差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,outo2 误差比 outo1 误差小得多。这是因为 0.7729 比 0.01 的 0.7514 更接近 0.99,所以参与 outo1 计算的神经元的变化应该比 outo2 更大。

我们如何根据影响总误差的因素来更新权重?很简单,只需计算给定重量的变化对总误差的影响,并根据这种关系进行更新。

例如,你能想出一种方法来计算权重 w5 对总误差的影响有多大吗?换句话说,w5 权重的变化对总误差的影响有多大?这听起来不耳熟吗?

我们说的是衍生品!看,我们可以把每个神经元理解为一个函数,应用链式法则,从总误差得到 w5 权重。但首先,你还记得链式法则是如何运作的吗?

让我们看一个例子:假设我们想对函数求导:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

换句话说,我们想知道 x 变量的变化对 y 变量的影响有多大。

我们可以把这个函数理解为其他两个函数的组合,其中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们需要分别对 x 求导 y 。为此,我们需要首先相对于 uy 求导,然后相对于 xu 求导。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们的例子中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是应用的链式法则。现在让我们把它看成一个图表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

想象每个圆都是函数,每个箭头都是乘法。然后,利用链式法则,我们可以写出:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,让我们看看如何写出计算 Etotal 相对于权重 w5 如何变化的公式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

正如开膛手杰克所说:让我们去寻找零件。总误差定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正如我们所见,w5 只影响 o1 神经元,所以我们只关心使我们的 Etotal = Eo1 的 Eo1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

因此,我们可以将 w5 权重与 resepct to Etotal 的方差定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

太好了!让我们看下一个术语:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这可以表示为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

及其衍生物:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后两步是可能的,因为逻辑函数的导数是一个偶函数,即 f(x)=f(-x)

好吧,让我们回到正题。我们已经有了导数,所以现在我们要计算它的值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们已经有了第一项和第二项,我们只需要计算突出显示的项就可以得到 w5 :

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果我们回忆一下,01 年的是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

如果我们看一下 o1 神经元的输入,我们可以直接计算 in01 公式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们能够计算我们的期限;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

终于!我们已经有了所有必要的术语来了解 w5 对 Etotal 的影响程度:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们已经知道如何计算第二层和 terera(隐藏和退出)影响之间的权重。但是…我们如何发现第一层和第二层(入口和出口)之间的权重有什么影响呢?

很简单,和我们之前做的一样!

我们首先需要定义的是什么?

Etotal 相对于重量 w1 的导数。这是怎么定义的?

这里是网络:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

让我们将神经网络解构为神经元:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

现在,我们有两条路可走:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们需要计算对应于 1 和 2 神经元的误差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这意味着我们现在有两个影响权重 w1 的误差源,即 Eo1 和 Eo2。各自是如何定义的?很简单,如果我们在网络图中从 Eo1 走到权重 w1,我们会发现的第一个元素是什么?outo1,对吧?

有了它,我们已经不得不:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

让我们求解到 Eo1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们有了 Eo1 相对于 w1 的变化量。但是我们缺少一些东西,如果我们再看看神经网络:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

我们还需要对应于第二个神经元的误差, Eo2 。有了这个误差,我们就可以计算出重量 w1 对总量的影响有多大,这就是我们感兴趣的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对每个权重重复这一过程,我们就可以对权重应用梯度下降,从而更新权重,参见:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

其中 η 是学习率,表示我们在梯度的反方向要走多大的一步。

最后的话

一如既往,我希望你喜欢这篇文章,你已经了解了神经网络以及它们如何利用数学来学习自己!

如果你喜欢这篇文章,那么你可以看看我关于数据科学和机器学习的其他文章 这里

如果你想了解更多关于机器学习、数据科学和人工智能的知识 请在 Medium 上关注我,敬请关注我的下一篇帖子!

神经网络:弗兰克尔的奇迹

原文:https://towardsdatascience.com/neural-networks-frankles-miracle-dfbd031ae1be?source=collection_archive---------59-----------------------

~ 最新的剪枝协议是一个万亿美元的火箭~

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

亚历克斯·霍利奥克Unsplash 上拍摄的照片

TL;凭借彩票成名的博士乔纳森·弗兰克尔和迈克尔·卡宾,以及亚历克斯·伦达,已经做出了 完美的修枝剪 ,尽你所能地缩小神经网络,不会牺牲准确性。而且,这个方法非常简单。当你把在边缘获得的效用加起来时,这些研究人员在加利福尼亚是值得的。不夸张。

本书

保罗·鄂尔多斯,上个世纪最伟大也是迄今为止最多产的数学家之一,会爱上那些证明和定理,它们以其绝对的简单、优雅、广泛的影响和富有洞察力的技巧,必定来自“那本书”。

这里,鄂尔多斯的意思是上帝用来创造世界的真理卷轴。数学家们像朝圣者一样聚集在这些证据周围。正是它们激励我们花几十年时间进行徒劳的斗争。所以,当我听到这个消息,看到弗兰克尔的论文时,他的评论让我不寒而栗:“这是……从书上来的。“我怀疑他感觉好像有一份金色的礼物飘进了他的大腿。这些真理是如此简单,以至于它们似乎是迷宫中的错误转弯,然而它们却打开了不可能的新前景。

而且,当我们看到从这种根本性转变演变而来的一连串影响时,我们应该清楚这是一个强大的工具——赫菲斯托斯的铁砧。

自主滑行

为了说明弗兰克尔的修剪有什么价值,想象一下你刚刚花了 1000 美元买了一辆自动驾驶汽车,作为出租车的副业来赚取收入。那辆车要在六年内付清,每天需要留出 50 美分——利润需要比这更多,如果利润大得多,就会刺激更多的出租车。

现在,把它和一台价值 1000 美元的数控机床做个比较,每两周就会吐出另一辆自动出租车。哇哦。这将很快收回成本,并产生巨大的利润。每个人都会想买那辆 CNC,因为它的成本分摊越来越多的自动驾驶出租车上。

你不仅被这些利润所激励;增加的供应降低了价格,更低的单位 T2 资本成本让你继续在这些价格上获利。因此,消费者和生产者都带着更多的钱离开,与此同时,出租车服务非常丰富,本身就产生了巨大的价值。

那么,剪枝算法是如何为神经网络做这种事情的呢?

法兰克林

当谷歌训练其最新的自然语言模型时,它必须在大规模并行专用处理器机架上运行数周。最近的其他巨头也是如此;每一个吸收计算机的使用一个超级计算机,一次一个 有用服务实例。如果对该服务的需求增加,您将需要更多的机架,因此它仍然昂贵,部分抑制了需求,这意味着它为市场提供的总价值减少了。

相比之下,如果你能把这个庞然大物缩小到一个茶杯里,那么每个人的手机或笔记本电脑就足以产生这种有用的服务。而且,向数亿用户推出这项服务实际上是免费的。所以,最初的超级计算机时间每翻一次产生更多的美元。此外,最重要的是,计算机可以继续开发更多手机应用大小的人工智能,就像我们制造自动出租车的数控机器一样。这些应用程序中的每一个都以最低的成本为如此多的人提供了实用工具,这将比其他方式更快地推动对每一个定制应用程序的投资*。*

这与杰冯悖论有关——当机器变得更加节能时,每一美元的能源都会产生更多的收入,所以你最终会使用更多的能源,因为它是高效的。能源总需求增加*。考虑到有多少个数量级的与科学相关的网络更便宜,以及推出众多专家是多么容易,我预计对能源、计算、数据、人才、洞察力的需求将大大增加,加速整个行业的开发和部署*

向上跳跃一个指数

正如我们的全球危机令人痛苦地表明的那样,一条指数曲线即使只是稍微陡一点点就会变得势不可挡。而且,如果你能延迟一个指数级的时间,哪怕是很短的时间,那的百分比损失就会在未来的每一个时刻持续下去,累积的贴现成本至少是延迟时刻的损失的 8 倍。因此,每三天增加一倍的疾病,延迟六天,在未来的所有时间里有四分之一的人患病。

同样,如果你以指数形式向前跳跃*,你将获得巨大的累积贴现收益。增加该指数的陡度甚至更多。据我所知,弗兰克尔的美丽盆景是一个越来越陡峭的曲线。如果 10 亿人每人每天受益超过*35 美分,那么按照保守的估计,这就值几万亿。每部手机上的超级计算机人工智能可能会有更大的帮助。**

最让我惊讶的是这种技术竟然可以存在!在抽象、虚幻的数学世界中,是什么让这种方法成功了呢?弗兰克一定听到了拉马努金天使的低语。正是这种美丽而神秘的巧合让我对毕达哥拉斯的故事肃然起敬——“宇宙是由数字组成的。”

神经网络:从零到英雄

原文:https://towardsdatascience.com/neural-networks-from-hero-to-zero-afc30205df05?source=collection_archive---------13-----------------------

了解神经网络最重要的参数!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 vectorstock

介绍

本文将涵盖以下主题:

  • 最优化理论:梯度下降及其变化
  • 学习率和批量大小
  • 损失和激活功能
  • 重量初始化

最优化理论:梯度下降及其变化

如果你想要梯度下降的详细解释,我建议你看看这篇文章,其中有对神经网络所基于的数学的深入研究。

总之,梯度下降计算训练集中每个样本的误差,然后在指向梯度的方向上更新权重。

换句话说,对于每个时代,我们都需要:

  1. 计算每个预测(向前传递)。
  2. 计算每一个误差。
  3. 向后传播误差,以评估每个权重在该误差中的重要性。
  4. 最后,相应地更新权重。

假设我们有:

  • 包含 100,000 个样本的数据集
  • 每次向前传递需要 2 毫秒
  • 每次误差计算需要 1 毫秒
  • 每次反向传播需要 3 毫秒

如果我们计算一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个常规的神经网络可能需要数百甚至数千个时期来适当地收敛。假设我们需要 100 个历元,这是一个很低的数字。

我们的神经网络需要多少才能被训练好?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间太长了。我们假设只有 100,000 个样本,这很好。例如,ImageNet 由 120 万幅图像组成,每个时期需要 2 小时,换句话说,需要 8.3 天。一个多星期来看一个网络的行为。

大幅减少训练神经网络所需时间的一种方法是,每次我们想要更新权重时,使用随机选择的单个样本。

这种方法被称为随机梯度下降(SDG)。使用 SDG,我们只需计算一个样本的预测、误差和反向传播来更新权重。

这将把总培训时间减少到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一个巨大的进步。但是这种方法有一个非常重要的缺点。

在这两条路径中,你认为哪一条是梯度下降路径?哪一个是随机梯度下降的?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自这里

红色路径是沿着梯度下降的路径。它使用数据集的所有样本计算梯度(下降路径),并总是在最小化误差的方向上获得一致的更新。

紫色路径是 SGD 遵循的路径。这是怎么回事?每次权重更新都是为了通过仅考虑一个样本来最小化误差,因此我们最小化的是该特定样本的误差。

这就是为什么它有一个更混乱的行为,它的收敛成本更高,虽然,作为回报,它运行得更快,所以在 GD 需要运行一个纪元的时间里,SGD 可以运行数千个。

看起来最好的选择是平衡这两种方法。如果我们看一下前面的图片,最佳路径是绿线。

为了计算这条路径,让我们回顾一下到目前为止讨论过的方法:

  • 计算我们的训练集的所有元素的预测和误差的方法:(香草)梯度下降
  • 计算从我们的训练集中随机选择的 1 个元素的预测和误差的方法:随机梯度下降

如果我们选择的不是 1 个元素,而是 K 个元素呢?这样一来:

  • 我们增加了算法的稳定性,因为我们不仅查看一个元素,而且查看 K (也就是说,我们减少了洋红色线方向的突然和混乱的变化)
  • 我们减少了关于传统下降梯度的执行时间,因为我们从训练集的 N 个样本减少到 K ,其中 K < < N

这种方法被称为小批量随机梯度下降法,是实践中最常用的方法。

K通常被选择为 2 的幂,因为这允许你利用一些针对这些情况的 GPU 实现的优化。一个典型的 K 可能是 K =32,但最终,这还是受到了 GPU 内存的限制。

K 越低,它就越像纯 SGD,它需要收敛的纪元就越多,尽管它会更快地计算它们也是事实。

另一方面, K 越高,就越像纯 GD,每个历元的计算就越麻烦,但收敛所需的时间就越少。

学习率和批量大小

学习速率和批量大小是与下降梯度算法直接相关的两个参数。

学习率

你可能知道,(或者如果你不知道,你可以在这里查看)更新神经权重的方法是通过这些公式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://mattmazur . com/2015/03/17/a-逐步-反向传播-示例/

乘以∂Etotal/∂wn 的叫做 η ,就是学习率。学习率表示我们给予误差的重要性,以更新每个权重。也就是说,权重的变化有多快或多突然。

因此,一个非常高的 η ,将在从一个迭代到另一个迭代的巨大步骤中改变权重,这可能导致跳过最小值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . quora . com/In-neural-networks-why-one-use-many-learning-rates-In-decay-steps-than-one-smooth-learning-rates-decay

另一种可能性是建立非常低的 η ,这将使我们的网络需要太多的历元来达到可接受的最小值。此外,我们可能会陷入比更高的η所能达到的最佳最小值更糟糕的最小值中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . researchgate . net/publication/226939869 _ An _ Improved _ EMD _ Online _ Learning-Based _ Model _ for _ Gold _ Market _ Forecasting/figures?lo=1

让我们谈谈最小值:我们用神经网络实现的,通常不是我们函数的全局最小值,而是足以正确执行我们正在开发的任务的局部最小值。

我们想要的是一个最优的学习速率,它允许我们随着时间的推移减少误差,直到我们达到最小值。在图表中,这个学习率就是红线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/useful-plots-to-diagnostic-your-neural-network-521907 fa2f 45

为了让我们的学习率达到最优,我们可以对我们的学习率进行衰减。这种衰减会随着时间的推移降低学习速度,所以当我们达到最小值时,它会小到足以避免跳过它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www.pinterest.es/pin/825918019139095502/

因此,我们通过选择一个非常低的学习率和跳过最小值来避免长时间等待收敛,因为我们越接近它,我们向它迈出的步伐就越小。

批量

回想一下上一节,SGD 是一个小批量 SGD,其中 K=1。

并且小批量 SGD 的 K 表示每次用于更新权重的样本数量。这不是一个关键参数,它通常被设置为我们的 GPU 可以容纳的最大样本数。

我们有一个 8GB 内存的 GPU,如果每个图像占用 1MB,我们可以容纳多少个样本?

嗯,没那么简单!这取决于网络的架构。密集或完全连接的层(在传统层中,所有神经元都与下一层中的所有神经元相互连接)具有更多参数,因此占据更多内存。

我们还有卷积层、汇集层、分离层和许多其他类型。因此在实践中,很难手工计算出我们可以使用的最大样本数。

我们所做的是尝试将批量大小设置为 2 的倍数,如果出现内存错误,就减少批量大小。例如,我们将从 512 开始,如果我们有一个错误,我们将下降到 256、128、64、32、16、8、4、2 甚至 1。

根据您的网络架构,您可能必须使用 K=1,因此 SGD。尽管通常优选的是将图像尺寸从 512×512 减小到 256×256 或 128×128 像素,并使用较大的 k

学习率和批量关系

记住学习速度与批量大小有关,这一点非常重要。

如果我们接近 K=1,我们必须降低学习率,使得权重的更新不那么重要,因为它更接近 SGD,换句话说,更接近用单个随机样本计算梯度。

因此,总之,如果我们使用较低的批量大小,建议使用较低的学习速率,但我们也会增加历元的数量,因为后面的条件会使我们的神经网络需要更多的时间来收敛。

损失和激活功能

损失函数

损失函数告诉我们我们的预测有多错误。

想象一下,我们只需要看一张照片就能猜出一栋房子的价格。我们的神经网络将以照片的像素作为输入,以显示价格的数字作为输出。

例如,假设我们想要预测一栋房子的价格,所以我们正在训练网络,而这栋房子就在我们的训练集中。当图片经过时,计算出一个预测,那就是它值 323567 美元。事实是房子价值 600,000 美元,因此很明显,一个合适的损失函数可以是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

考虑到这一点,最常见的损失函数是:

对于回归问题

  • 均方误差
  • 绝对平均误差

分类问题

  • 二元交叉熵
  • 范畴交叉熵

正如我在的上一篇文章中所写的那样,只关注回归问题,让我们来看看其中的每一个问题:

  • 均方差:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/supervised-learning-basics-of-linear-regression-1 cbab 48 d0 EBA

均方差或 MSE 是真实数据点和预测结果之间的平方差的平均值。这种方法惩罚越大的距离,这是标准的回归问题。

  • 平均误差

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/supervised-learning-basics-of-linear-regression-1 cbab 48 d0 EBA

平均绝对误差或 MAE 是真实数据点和预测结果之间的绝对差值的平均值。如果我们将此作为遵循的策略,梯度下降的每一步都将减少 MAE。

什么是交叉熵?

我们首先需要理解什么是熵。让我们用几个例子来说明这一点:

例一

想象一下,我们正在玩一个游戏:我们有一个装有不同颜色球的袋子,游戏的目标是猜一个志愿者用最少的问题数画出哪种颜色。

在这种情况下,我们有一个蓝色球、一个红色球、一个绿色球和一个橙色球:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . quora . com/Whats-an-intuitive-way-to-think-of-cross-entropy

也就是说每个球都有 1/4 的机会出去。

最好的策略之一是先问你发的球是蓝色的还是红色的。如果是,我们会问球是不是蓝色的。如果不是,我们会问它是否是绿色的。所以我们需要两个问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . quora . com/Whats-an-intuitive-way-to-think-of-cross-entropy

例 2

这次我们有一个装有球的包,其中 1/2 是蓝色的,1/4 是红色的,1/8 是绿色的,1/8 是红色的。现在,最佳策略是先问它是不是蓝色的,因为蓝色的可能性更大。如果是的话,我们就完了。如果不是,我们可以问它是否是红色的,这是下一个最有可能的类。如果是的话,我们就完了。如果不是,我们可以问它是绿色的(还是橙色的)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . quora . com/Whats-an-intuitive-way-to-think-of-cross-entropy

现在发生的情况是,一半的时间(1/2)是蓝色的,我们要花 1 个问题来猜测。1/4 的时间是红色的,它花了我们 2 个问题。1/8 是绿色的,要花我们 3 个问题,如果是橙色的也一样。

所以猜一个球的期望题数是:1/2⋅1(蓝色)+1/4⋅2(红色)+1/8⋅3(绿色)+1/8⋅3(橙色)=1.75

例 3

想象一下,现在我们有一个装满蓝色球的袋子。我们需要问多少题才能找出他们拿出的是什么颜色的球?无,0。

从这些例子中,我们可以得出一个表达式,它允许我们根据球的概率来计算问题的数量。因此,概率为 p 的球需要 log2(1/p)个问题。

例如,对于 p=1/8 的球,我们需要n _ quest= log2(1/(1/8)=3

因此,预期的问题总数是:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,理解熵的一种方法如下:

如果我们遵循最优策略,让我们猜测球的颜色的预期问题数量是多少?

所以,游戏越复杂,熵越高。在这种情况下,例 1 >例 2 >例 3。

好,现在我们知道了熵是什么,让我们看看交叉熵是什么。

交叉熵

假设我们对例 2 采用了例 1 的策略:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://www . quora . com/Whats-an-intuitive-way-to-think-of-cross-entropy

所以,我们必须问两个问题来确定它是不是任何颜色。如果我们计算所需问题的总数,考虑到这一次每个球都有一个概率,我们得出:

n_total_quest=1/2⋅2(blue)+1/4⋅2(red)+1/8⋅2(green)+1/8⋅2(orange)=2

所以这个策略比例 1 中的策略更差。

最后,直觉上,熵是使用最佳策略时预期的问题数量,交叉熵是不使用最佳策略时预期的问题数量。

为此,我们试图做的是最小化交叉熵。

在形式上,它被定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中:

  • pi 是球的实际概率(在我们的例子中,蓝色是 1/2,红色是 1/4,绿色和橙色是 1/8)
  • pi^ 是我们使用策略时假设的概率,在这种情况下,所有球的概率相等(所有颜色的概率为 1/4)

记住公式中什么在哪里的一个方法是,记住我们想做的是找出按照我们的策略需要多少个问题,这是 pi^,所以在 log2 里面是 pi^.

激活功能

如果我们没有激活功能,我们会有以下内容:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/neural-representation-of-logic-gates-df 044 EC 922 BC

我们必须 y(x)=Wx+b,这是一个线性组合,甚至不能解决像 XOR 这样的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

http://www . ECE . utep . edu/research/web fuzzy/docs/kk-thesis/kk-thesis-html/node 19 . html

因此,我们需要一种方法来引入非线性,这就是激活函数的作用。在下图中,您可以看到一些最典型的网络,以及它们在网络中的位置:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/activation-functions-and-its-types-哪个更好-a9a5310cc8f

这里你可以看到最常用的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

https://towards data science . com/complete-guide-of-activation-functions-34076 e95d 044

很难知道使用哪一种方法我们的网络会表现得更好,但是有一种方法通常几乎总能得到好的结果:ReLU。

因此,每当我们开始时,我们将使用 ReLU,一旦我们得到一些我们认为好的结果,我们可以尝试使用泄漏的 ReLU 或任何其他您想要的。每天都有新的出现,简单的谷歌搜索就能让你找到一些有趣的:比如 SELU(https://towards data science . com/卢瑟-make-fnns-great-again-snn-8d 61526802 a9)。

这些激活函数中的许多需要权重初始化的特定方法,以便位于特定范围的值之间,并且梯度下降正常工作。

在输出图层的情况下,softmax 激活函数是使用最多的一个,因为它能够为每个类提供一个概率,使所有类的总和为 1。

由于这可能看起来有点复杂,请在下面找到推荐的食谱,作为以上所有内容的总结:

配方

  1. 开始使用学习率为 0.01 或 0.001 的 ReLU,观察会发生什么。
  2. 如果网络训练(收敛)但是很慢,可以试着提高一点学习速率
  3. 如果网络不收敛且表现混乱,则降低学习速率
  4. 一旦你的网络启动并运行,尝试一下漏热、最大或 eLU
  5. 不要使用乙状结肠,实际上它通常不会给出好的结果

重量初始化

正如您之前看到的,权重和偏差初始化对于实现我们的网络收敛到适当的最小值非常重要。让我们来看看初始化权重的一些方法。

如果我们遵循 MNIST 数据集(正如我们在本文中所做的),我们的权重矩阵将是 768(输入)x 10(输出)。

常数初始化

我们可以预先设定我们的重量

  • 零:
W = np.zeros((768, 10))
  • 一:
W = np.ones((768, 10))
  • 到常数 C :
W = np.ones((768, 10)) * C

正态和均匀分布

我们还可以使用均匀分布来初始化权重,其中定义了[上界,下界],并且该范围内的所有数字具有相同的被选中概率。

例如,对于[-0.2,0.2][-0.2,0.2]之间的分布:

W = np.random.uniform(low=-0.2, high=0.2, size=(768, 10))

利用该指令,我们将使用从[-0.2,0.2][-0.2,0.2]之间的范围中提取的值来初始化 WW 权重矩阵,在该范围中,它们都具有相同的被提取概率。

我们也可以用正态或高斯分布来计算,其定义为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如你所知:

  • μ是平均值
  • σ是标准差,σ2σ2 是方差

因此,我们可以用正态分布初始化我们的权重,其中 μ=0σ=0.2 ,例如:

W = np.random.normal(0.0, 0.2, size=(768, 10))

初始化:正常和统一的 LeCun

另一种更先进的方法是 LeCun 方法,也称为“高效反向投影”。

该方法定义了 3 个参数:

  • Fin:该层的条目数(在我们的例子中是 768)
  • Fout:该层的出口数量(在我们的示例中为 10)
  • 极限:根据 Fin 和 Fout 定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过这种使用均匀分布的方法来初始化 W 的代码将是:

W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

对于一个普通人来说:

W = np.random.normal(low=-limit, high=limit, size=(F_in, F_out))

初始化:Glorot/Xavier 正常和统一

这可能是最广泛使用的初始化权重和偏差的方法。这是使用 Keras 时的默认设置。

在这种情况下,也定义了与 LeCun 相同的参数,但是极限的计算有所不同:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用这个方法初始化 WW 的代码与使用 LeCun 的代码相同。

对于均匀分布,它将是:

W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

对于一个普通人来说:

W = np.random.normal(low=-limit, high=limit, size=(F_in, F_out))

初始化:何等人/和正常而统一

这种方法是以何的名字命名的,他是《深入研究整流器:在 ImageNet 分类上超越人类水平的性能》一书的第一作者。

通常,当我们训练使用特定类型的 ReLU 作为激活(如参数 ReLU)的非常深的神经网络时,使用这种方法。

制服的代码是这样的:

limit = np.sqrt(6 / float(F_ini))W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

在正常情况下,这个:

limit = np.sqrt(2 / float(F_ini))W = np.random.uniform(low=-limit, high=limit, size=(F_in, F_out))

食谱:

权重的初始化通常不是网络训练中的决定因素,但有时它会导致网络无法训练,因为它无法收敛。

所以推荐的建议是用 Glorot 的,如果那天你觉得运气好,想看看自己在准确率上能不能提高,那就和别人一起试试。

最后的话

一如既往,我希望你喜欢这个帖子,你现在是神经网络的专家了!

如果你喜欢这篇文章,那么你可以看看我关于数据科学和机器学习的其他文章 这里

如果你想了解更多关于机器学习、数据科学和人工智能的知识 请在 Medium 上关注我,敬请关注我的下一篇帖子!

神经网络有助于将著名的 1896 年视频高档转换为 4K 质量

原文:https://towardsdatascience.com/neural-networks-help-upscale-conversion-of-famous-1896-video-to-4k-quality-d2c3617310fe?source=collection_archive---------17-----------------------

艾使得在 4K 重现卢米埃尔兄弟的《火车抵达拉乔塔特车站》成为可能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

火车到达拉乔塔特(卢米埃兄弟,1896 年)

随着时间的推移,神经网络变得越来越复杂。他们已经允许科学家们实时地从脑电波和许多其他事物中重建人类的思想。

1896 年,卢米埃尔兄弟电影 “火车到达拉乔塔特车站” ,持续 50 秒,激起了观众的情绪,神圣地迈出了电影院的第一步。它仍然是卢米埃尔兄弟作品的象征,更广泛地说,是第七艺术的开端。

最近,一个名叫 丹尼斯·希尔亚耶夫 的人使用神经网络将 1896 电影缩放到 4K 分辨率使用 托帕斯实验室 商业 千兆像素 AIDAIN 图像编辑应用。他不仅将镜头增加到 4K ,还将帧率提高到每秒 60** 帧。**

Shiryaev 使用 Gigapixel AI4K 格式渲染了 50 秒静音短片 《一列火车抵达拉乔塔特车站》 ,画面非常逼真。原始胶片的质量非常模糊,分辨率非常低。他的作品发表后,获得的结果令人惊讶。他的新视频似乎非常符合 21 世纪的视频标准。

尽管有一些不完美,比如图像跳跃或某些细节模糊,这种体验的成果令人印象深刻。为了完成他的工作, Shiryaev 还在这部无声电影中加入了的声音**。**

丹尼斯·希尔亚耶夫 的电影复原版

这些图像的获得得益于一种人工神经网络形式:生成对抗网络,或 GANs 。这种技术在最近几个月得到了推广,特别是著名的 Kaggle 比赛【deep fake Detection Challenge】和由 AI 产生的艺术创作的出现。

提醒一下,方法在于对抗两个神经网络**。第一个基于数据生成对象,第二个的作用是确定对象的真实性。第一个网络一次又一次地尝试,直到它的产品完美到足以欺骗第二个网络。通过这种方式,程序学习自己来生成最可能的图像。**

Gigapixel AI 软件采用专有插值算法,分析图像,识别细节和结构,完成图像。它可以使图像更清晰,甚至在经过600%放大后。

(深度感知视频帧插值)* 另一方面,想象并在现有视频剪辑的关键帧之间插入帧。换句话说, DAIN 分析并映射视频剪辑,然后在现有图像之间插入生成的填充图像。和 4K TVs 的运动平滑功能是一个概念。为了在这个 1896 视频中实现相同的结果, Shiryaev 添加了足够多的图像,以将速率提高到 60 FPS 。因此,除了最初记录的 24 张图像之外, DAIN 每秒自动生成并添加了 36 张额外图像。*****

卢米埃尔兄弟的原创电影

Shiryaev 的 “火车抵达拉乔塔特站” 的改良版看起来像是最近用智能手机GoPro 制作的电影。与原版视频的对比相当惊艳,尤其是在新版本中获得的流畅性。太阳在行驶的火车上的反射和站台上的女性珠宝被很好地转录,这也许是最显著的改进之一。

神经网络也可以使用相同的基本技术进行着色:从一堆彩色照片开始,将它们转换为黑白照片,然后训练神经网络来重建彩色原件。 Denis Shiryaev 甚至有任务在 视频 YouTube 频道 上为他的改良版火车抵达拉乔塔特站* 添加色彩。*****

然而,人们相信,Shiryaev 的技术是经过深思熟虑的,非常有前途,因为它可以很好地激励其他热爱无声电影的人。

神经网络算法非常强大,并且每年都在改进。使用的可能性非常多,电视世界很可能是最大的受益者之一。

“向神经网络展示一张低分辨率的人脸图像,它会识别出这是一张脸,并为受试者的眼睛、鼻子和嘴巴填入正确的细节。”托帕斯实验室说。

不幸的是,这些有用的技术有时被用于恶意目的,例如,它们可以用于制作“深度假货”并允许在视频中进行身份盗窃。

因此,有理由担心它可能被滥用,但技术可以很容易地成为一种利用人工智能更新旧电影并彻底改变行业本身的方式。

参考资料:

如果你设法来到这里,恭喜你。感谢阅读,我希望你喜欢它。关于机器学习的个人接触或讨论,请随时在LinkedIn上联系我,别忘了在 GitHubMedium 上关注我。

神经网络直觉-7。自我监督学习和 SimCLR 论文解释

原文:https://towardsdatascience.com/neural-networks-intuitions-7-self-supervised-learning-and-simclr-paper-explanation-ba0101f10c99?source=collection_archive---------31-----------------------

大家好:-)

今天我将谈论深度学习领域最重要和最有趣的话题之一—自我监督学习和最近一篇展示 SOTA 自我监督学习结果的论文— 视觉表征对比学习的简单框架

自我监督学习之所以至关重要,是因为在规模下对数据进行手动标记是非常非常昂贵和繁琐的。因此,焦点自动集中在自我监督非监督学习领域——以减少对大量数据进行标记的需要。**

让我们首先了解什么是自我监督学习,以及它如何帮助解决上述人工标记的问题(或者至少最小化它)。

在整篇文章中,我将从解决现实世界问题的角度来解释事情。

问题:

让我们考虑有 1000 个类别的图像分类问题。我们有覆盖这 1000 类的未标记数据(比如 100 万张图片)。我们如何着手解决这个问题?

  1. 首先,我们需要 手动标注 这些图像。
  2. 如有必要,应用 增强
  3. 然后简单地用 resnet50 骨干 训练一个分类器——用 ImageNet 预训练的权重或者 随机 权重。

步骤 2 和 3 非常简单。如果您已经有了所需的框架,那么您可以快速扩充和训练分类器。

当然,步骤 3 需要我们试验不同的主干、输入图像分辨率、优化器、损失函数、超参数,如学习速率、批量等等。

但是第一步也是最重要的一步是给数据贴上标签。手动标记如此大量的数据需要大量的资源,如时间和人力。最重要的是,我们需要确保 人为错误尽可能少。

因为标记所有的数据是乏味的,所以让我们只注释随机的数据子集。

为了简单起见,我选择了一个随机子集,但我们可以优化这个选择。

既然我们要标注一小部分,我们如何减少手工标注的工作量或者完全消除这个标注过程?(尽管这似乎是一个不切实际的目标:),或者至少利用这大量未标记的数据来帮助提高准确性。

解决方案:

1。转移学习:

一个显而易见的方法是使用一些与我们的数据集非常相似的开源数据集(即使我们经常找不到),在开源数据集上进行训练,然后在我们的数据集上微调网络。

这确实有助于提高分类器的准确性,但不是在很大程度上,并且总是比从随机权重开始更受欢迎。

Btw,为什么我说这个比随机初始化好?

这是因为它有助于实现更高的精度和更快的收敛!

很好,但是怎么做?

由于我们在类似于我们的目标数据分布的开源数据集上训练我们的网络,这意味着我们的网络已经学习了一些相关特征,而不是随机特征。因此,一旦我们在我们的目标数据集上再次训练网络,自然期望它表现良好并避免在小目标集上过度拟合。这可以被视为等同于“在更多数据上训练网络”。

但是,我们可以通过从我们的未标记目标数据分布中学习的表示来做得更好,而不是从不同的数据分布中学习的表示。

因此,我们的下一个方法是自动地从这个未标记的目标分布中学习表示!

这种使用未标记的数据来帮助监督任务的技术被称为 自监督学习 ,并且帮助从这种未标记的目标分布中学习表示的方法被称为 借口任务。

  • 这里被监督的任务是在标记数据上训练一个分类器,也称为* 下游任务。*

2。自我监督学习:

现在我们知道了什么是自我监督学习,让我们看看有哪些类型的借口任务,以及它们实际上如何帮助学习表征。

这篇文章将涉及多个借口任务。因此,我将只给出这些任务的概述,以及如何使用它们来解决我们手头的问题:-)

a .自动编码器:

Autoencoder 是一种神经网络,它试图重建输入,从而学习输入数据表示。

自动编码器看起来像:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自动编码器的架构

  • 在我们的例子中,输入和输出将是一个图像。

*网络接收图像并输出相同的图像。通常使用的损失是 MSE 损失。这里要注意的主要是 *代码(或者嵌入)。T3 表示从输入数据中学习到的特征。

这对解决我们的问题有什么帮助?

我们可以在未标记的数据上训练一个自动编码器(resnet50 编码器,avgpool 的输出作为嵌入),加载编码器的权重,并在标记的子集上训练。

b.范例-CNN:

论文:- 有判别力的无监督特征学习与样例卷积神经网络

作者提出了以下方法:

  1. 对于数据集中每个未标记的图像,应用随机变换,例如平移、旋转、缩放和其他颜色变换。
  2. 得到的增强图像集被认为是一个类的一部分(称为代理类)。**
  3. 之后,训练一个分类器来区分这些代理类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图来自 利用样本卷积神经网络进行的判别无监督特征学习

请注意,可能有太多的代理类表示同一个基本事实类,因为不可能事先知道它们,所以我们可以首先对这些未标记的图像进行聚类(从相似数据集上的预训练模型或在同一数据集上使用 autoencoder 进行嵌入),然后对这些聚类应用变换。

在理想的情况下,每个类(这是我们的代理类)只有一个样本,随机变换被应用于每个样本并进行训练。

像自动编码器一样,我们可以将训练好的分类器的权重用于我们的下游任务。

c.对比学习— SimCLR:

论文 视觉表征对比学习的简单框架 提出了另一种机制,使用 对比学习 从未标记的数据集中学习有用的表征,该表征稍后可用于下游任务。

提议的方法:

  1. 在训练期间,对 N 个 未标记图像中的一个 批次进行采样。
  2. 对于每幅图像, 应用两种变换——随机裁剪和调整大小, 生成两幅图像,这两幅图像被认为是 样本。同批剩余的 (N-1)张 被认为是 阴性 样本。现在用这两个类训练一个分类器。对该批中的每个图像重复该过程。
  3. 使用的基本编码器是 Resnet50(2048),后面是一个 2 层 MLP,它将表示从 2048 转换为 128 维。
  4. 所用的损失是 NT-Xent(归一化温度标度交叉熵损失)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 sim =余弦相似度,𝟙 ∈ {0,1 } IFFkI,τ表示温度参数。

目标是学习两个正图像和其余 N-1 个负图像的相似表示,以具有与这两个图像完全不同的表示。但是这是如何实现的呢?

  1. 为该批中的所有嵌入对计算 余弦相似度
  2. 对于 每个正对(I,j) ,我们计算一个 归一化相似度得分 ,并使用 log loss/CE loss 将其最小化。
  3. 对批(2N)中的所有图像进行此操作,最后取一个 平均值

然而,这里有一点很重要:

我们如何确保一批中用于阴性类别的(N-1)幅图像不包含阳性样本,因为我们首先不知道它们的标签?

可惜,文件没有清楚说明这点,我也不知道上述问题的答案。我们可以做的一件事是基于预训练的嵌入来挑选负面图像,但我不认为这种情况会发生!如果有人知道答案,请告诉我:-)

其他常见借口任务:

所有上述借口任务直接学习分类底层类(除了自动编码器),但也有任务试图优化不同的目标,但学习有用的表示为下游任务。

  1. 生成对抗网络:**我们可以训练 GAN 从我们的未标记数据分布中生成图像,使用生成器(即编码器)的权重并在我们的标记子集上重新训练。
  2. 预测图像旋转— 通过预测图像旋转进行无监督表示学习
  3. 预测图像中一个面片 wrt 与另一个面片的相对位置— 通过上下文预测的无监督视觉表示学习

参考资料:

  1. 用样例卷积神经网络进行判别性无监督特征学习
  2. 视觉表征对比学习的简单框架
  3. https://lilian Weng . github . io/lil-log/2019/11/10/self-supervised-learning . html

神经网络直觉:8。目标检测器中的平移不变性

原文:https://towardsdatascience.com/neural-networks-intuitions-8-translation-invariance-in-object-detectors-21db6e27879c?source=collection_archive---------44-----------------------

大家好!

这篇文章将会很短,主要讨论对象检测器中一个不太重要但被高度忽视的概念,特别是在单次检测器中— 平移不变性。

让我们理解什么是平移不变性,什么使得图像分类器/对象检测器平移不变性。

*注:本文假设您对单级和两级检测器的工作原理有背景知识:-)

平移不变性:

平移在计算机视觉中是指 在空间中的位移不变性是指不变的 性质。

因此,当我们说图像分类器或对象检测器是平移不变的时,它意味着:

图像分类器可以准确地预测一个类别,而不管该类别(更具体地说,模式)位于图像的空间维度的何处。类似地,检测器可以检测对象,而不管它出现在图像中的什么位置。

让我们看一个例子来说明每个问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**图像分类:**来自 MNIST 数据集的图像的未翻译和已翻译版本(量化卷积神经网络中的翻译不变性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**物体检测:**狗的翻译版本——图像中的待检测物体。

在本文中,我们将只考虑卷积神经网络——无论是分类器还是检测器,看看它们是否是平移不变量

卷积分类器中的平移不变性;

CNN 平移不变吗?如果是,是什么使它们对翻译不变?

首先,CNN 不是完全平移不变的,只是在一定程度上。其次,是“汇集”使它们平移不变,而不是卷积运算(应用过滤器)。

上述陈述仅适用于分类器,不适用于对象检测器。

如果我们阅读 辛顿在 CNN中关于平移不变性的论文,他明确指出 池层 是为了降低计算复杂度平移不变性 只是它的副产品。

人们可以通过输入正确的数据使 CNN 完全翻译不变——尽管这可能不是 100%可行。

注意:我不会解决池如何使 CNN 翻译不变的问题。你可以在下面的链接中查看:-)

* [## 杰弗里·辛顿谈 CNN 怎么了

我将在不同的生物启发的机器学习讲座上发布一些松散的笔记。在这个笔记中,我…

moreisdifferent.com](http://moreisdifferent.com/2017/09/hinton-whats-wrong-with-CNNs)

【http://cs231n.stanford.edu/reports/2016/pdfs/107_Report.pdf 号*

两级探测器中的平移不变性;

两级物体探测器具有以下部件:

  1. 区域提议阶段
  2. 分类阶段

第一阶段预测感兴趣对象的位置(即区域提议),第二阶段对这些区域提议进行分类。

我们可以看到,第一阶段预测前景物体的位置,这意味着问题现在简化为图像分类——由第二阶段执行。这种减少使得两级检测器转换不变,而没有对神经网络架构引入任何明显的改变。

对象的类预测对象的边界框预测的这种解耦构成了两阶段检测器平移不变量*!*

单级探测器中的平移不变性;

既然我们已经研究了两阶段检测器,我们知道单阶段检测器需要耦合盒预测和类预测。一种方法是在特征图上进行密集预测(锚点),即在特征图上的每个网格单元或一组单元上进行。**

阅读下面这篇文章,我将深入解释锚: 神经网络直觉:5。锚点和对象检测

由于这些密集预测是通过对特征图上的过滤器进行卷积而得到的,这使得网络能够在特征图上的不同位置检测到相同的模式。

例如,让我们考虑一个被训练来检测图像中存在的狗的神经网络。最终 conv 图层中的过滤器负责识别这些狗的图案。

我们向网络输入数据,使狗总是出现在图像的左侧,并用狗出现在右侧的图像进行测试。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后一层中的一个过滤器学习上面的狗模式,并且由于相同的过滤器一直被卷积,并且在特征图中的每个位置进行预测,所以它在不同的位置识别相同的狗模式!

最后来回答“为什么 滤镜 使 检测器平移不变而非量词平移不变?”

conv 网络中的滤波器在图像中学习局部特征,而不是在全局环境中学习。由于对象检测的问题是从图像中检测局部特征(对象),而不是从整个特征图中进行预测(这是在图像分类器的情况下发生的),所以滤波器有助于使它们对于平移不变。

这是我的系列文章的第八部分。我希望你们能够从总体上很好地理解平移不变性,以及是什么使得检测器对图像中的物体平移不变。如果我说错了,请随时纠正我:-)

干杯!

神经网络直觉:9。远程度量学习

原文:https://towardsdatascience.com/neural-networks-intuitions-9-distance-metric-learning-dae7c3a0ebdf?source=collection_archive---------22-----------------------

远程度量学习

欢迎回到我的神经网络直觉系列。在第九部分中,我们将深入了解**远程度量学习*,使用它背后的动机,提出的各种方法及其应用。*

注意:本文讨论的所有技术都属于 深度度量学习(DML),即使用神经网络的距离度量学习。

距离度量学习:

距离度量学习意味着在低维空间中学习距离,这与语义相似性的概念一致。(如[* 中所给,使用代理 】的无争议距离度量学习)*

上面的说法是什么意思 w.r.t 图像域?

这意味着学习低维空间(非输入空间)中的距离,使得输入空间中的相似图像导致相似的表示(低距离),而不相似的图像导致不同的表示(高距离)。

好的,这听起来正是分类器所做的。不是吗?是的。

那么这与监督图像分类有什么不同呢?为什么术语不同?

度量学习解决了机器学习中的开集设置问题,即在测试时推广到新的示例。

这对于特征提取器之后是完全连接的层分类网络是不可能的。

为什么?

这是一个非常重要的问题。答案如下:

  1. 一个分类器学习类特有特征而不一定是类属特征。**
  2. 具有 标准交叉熵损失的分类器最大化类间距离 ,使得 FC 层之前的特征是线性可分的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由分类网络提取的特征(在 FC 层之前,有 CE 损失)是线性可分的

并且不旨在最小化导致期望的 区别特征的类内距离。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

具有低类内距离和高类间距离的特征

学习区别特征的这一方面是度量学习所实现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 Softmax 分类生成的嵌入

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用双/三重网络生成的嵌入

在研究度量学习中最广泛使用的方法之前,让我们看看它的应用,使问题陈述更加具体,以及为什么标准的分类方法可能不适合。

度量学习的应用如下:

  1. 图像检索
  2. 近似重复检测
  3. 少/零投学习

太好了!

现在让我们看看度量学习中使用的突出方法:

a .具有对比损耗(对)的连体网络

b .具有三重损失的三重网络(三重网络)

c .分类基础方法。

目标:

以产生对于相似图像在欧几里得空间中接近(假设)而对于不相似图像远离的嵌入。

解决方案:

a .有对比损耗的连体网络:

论文通过学习不变映射进行降维通过将两幅图像作为输入并输出图像对是否相似来解决该问题。

方法:

  1. 为数据集中的每个图像创建相似不相似集合。
  2. 两幅图像*(来自相似/不相似集合)传递到同一个神经网络,并提取低维*嵌入/表示。**
  3. 计算两个嵌入之间的欧几里德距离。
  4. 将损失降至最低,以实现上述目标。
  5. 对大量对重复 1–4(所有对可能都不可行),直到模型收敛。

所以现在我们需要一个损失函数(包含欧几里德距离),对于相似的对来说是 0,对于不相似的对来说是 1。

这正是对比损失函数的作用!

对比损失:

(X1,X2)输入图像对*, Gw 为产生低维表示的函数映射(其中 w 代表参数),Y为表示相似或不相似的地面真实标签***

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对比损失函数(通过学习不变映射进行维度缩减)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Dw =表示之间的欧几里德距离

对比损失与传统的交叉熵损失有相似之处。损失函数中的第一项处理相似对(Y=0 ),使得 Dw 变为 0。第二项处理不同的线对(Y=1 ),使得 Dw 至少变为 m。

这里 m 是余量,m 是 0。

为什么我们需要在训练中展示不同的配对?为什么不简单地最小化一组相似对的损失函数呢?

作者回答说,“涉及不同对的对比术语是至关重要的。简单地在所有相似对的集合上最小化 DW (X1,X2)通常会导致崩溃的解决方案,因为 DW 和损耗 L 可以通过将 GW 设置为常数而变为零。

既然我们已经了解了什么是对比损失函数,那么什么是连体网络呢?

这种架构被称为暹罗架构,其中相同的网络(即共享相同的参数集)被用于提取一对中的两个图像的低维表示。

b.三重网络,三重损耗:

论文 FaceNet:人脸识别和聚类的统一嵌入采用了与对比损失类似的方法——除了不是在每一步都处理成对图像,而是考虑三个一组的图像。

三元组由锚、正面(类似于锚)和负面(不同于锚)图像组成。

进场:

  1. 形成三元组(由具有共同锚图像的相似和不相似对组成)。
  2. 通过相同的神经网络传递三元组,并提取低维嵌入。
  3. 计算欧几里得距离并最小化损失。
  4. 对大量的三个一组重复 1-3,直到收敛。

三重损失:

f 为产生低维表示的函数映射, xa 为锚图像, xp 为正图像, xn 为负图像, α 为空白。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三重损失函数

三重损失确保锚图像的表示比任何其他负图像更接近与其相似的所有图像。

什么是三联体网络?

其中相同的网络(即共享相同的参数集)用于提取三元组中所有图像的低维表示的架构被称为三元组架构/网络。

对比损失法和三重损失法的问题:

  1. 随着训练样本数量的增加,图像对和三元组的数量急剧增加,使得很难对所有可能的对或三元组进行训练。
  2. 训练对和三元组(即简单样本)的不良选择会导致辨别特征的无效学习。

那么,如何解决上述问题呢?

通过仔细选择训练图像对和三元组——离线或在线,并使用较大的批量。

*注意:有很多种技术有助于用对比和三元组方法解决采样问题,我希望在以后的文章中讨论这些技术:)

c.基于分类:中心损失

论文一种用于深度人脸识别的判别特征学习方法通过引入一种新的损失(称为 【中心损失】 )以及交叉熵损失(即 )来解决使用香草神经网络分类的目的。

本文解决了文章开头提到的问题——“分类器没有最小化* 类内 距离 而只是最大化 类间距离 导致可线性分离的特征而不是可区分的特征”。*

中心损耗:

中心损失最小化每个类中心和类样本表示之间的距离-这确保了同一类中样本的表示除了保持类间距离之外还保持相似(由 ce 损失负责)。

x 为输入样本, c 为该样本的分类中心。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中心损失

每次迭代计算类中心(嵌入)和样本嵌入之间的距离,并更新权重。

基于分类的培训的问题:

  1. 基于分类器的方法在目标类数量非常多的情况下变得不切实际——这是通常的情况,也是使用成对/三重损失背后的强大推理。

以上就是本文中关于 深度距离度量学习的全部内容。 我希望你们所有人都很好地理解了这个问题是什么,以及如何通过各种有趣的技术来解决这个问题:)

干杯!

其他资源:

https://Neptune . ai/blog/content-based-image-retrieval-with-siamese-networks

神经网络拿 TensorFlow 游乐场开玩笑!

原文:https://towardsdatascience.com/neural-networks-made-fun-with-tensorflow-playground-4e681a0c4529?source=collection_archive---------30-----------------------

使用 TensorFlow Playground 探索神经网络并从中获得乐趣

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

彼得·康伦在 Unsplash 上的照片

TensorFlow Playground 是一个非常棒的网站,在这里您可以可视化并直观地了解神经网络是如何工作的。这个网站由谷歌的 TensorFlow 团队开发,是让你探索强大的深度神经网络的最佳平台之一。

这篇短文将在不到 5 分钟的时间内指导您如何在没有任何神经网络经验的情况下开始在 TensorFlow 操场上工作。

我强烈建议你们所有人从下面提供的链接在浏览器的一个新标签上打开这个网站,然后跟着做。读完这篇文章后,你会非常熟悉如何使用这个神奇工具的基本知识。

[## 张量流-神经网络游乐场

这是一种构建从数据中学习的计算机程序的技术。它非常松散地基于我们如何思考…

playground.tensorflow.org](https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=circle&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.33938&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false)

好吧!所以,让我们开始了解这个网站上不同的东西。

GIF 来自 GIPHY

点击链接后,您应该能够找到 TensorFlow 游乐场平台,它应该类似于下图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

在确认我们现在都在同一页上之后,我们可以相应地理解第一个小节。

好吧!现在让我们理解下面显示的栏上的所有功能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

运行和暂停按钮用于开始连续运行 epochs,直到您决定停止。当纪元运行时,模型将继续训练。播放按钮左侧有一个复位按钮,用于复位整个网络。播放按钮的右侧是步长增加按钮,用于一次增加一个步长。此按钮很有用,因为运行/暂停按钮有时可能太快而达不到适当的结果。将鼠标悬停在这些按钮上,以了解它们到底是什么。

  • **学习速率:**神经网络学习正确拟合输出的速率。你可以根据自己的意愿改变它,并随时进行实验。但是,在本次演示中,我们将使用所有默认值。
  • **激活:**激活函数用于增强神经网络的性能。我们有四种选择,它们是 tanh、ReLU、Sigmoid 和 linear。
  • **正则化:**这是一种对学习算法进行轻微修改以使模型更好地泛化的技术。我们有 L1 和 L2 正则化选项可以使用,但我们将使用默认的无。
  • **正则化率:**如果我们选择正则化方法,该选项允许我们选择正则化率。
  • **题型:**我们有两个选项可以选择,即分类或回归型题型。在本次演示中,我们将使用分类类型。

现在,让我们继续了解我们正在处理的数据类型以及我们拥有的选项。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

您有四个难度递增的数据集选项,即圆形、异或、高斯和螺旋。我们可以选择将数据集分割成一个训练集,并以默认的 50%分割进行测试。如果您愿意,您可以引入多达 50 个噪声点。它还包含一个批处理大小按钮,为每个时期运行一个特定的批处理。最终重新生成按钮,再次生成数据。

橙色和蓝色在整个可视化中的使用方式略有不同,但一般来说,橙色显示负值,而蓝色显示正值。数据点(用小圆圈表示)最初是橙色或蓝色的,分别对应一个正值和一个负值。

让我们转到下一部分,即神经网络架构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

默认情况下,我们有一个 1:2:1 的神经网络架构,这意味着输入层有 2 个节点,隐藏层有 2 个,第一层有 4 个节点,第二个隐藏层有 2 个节点,最后是输出层。你可以根据自己的选择随意修改。在本次演示中,我将使用所有默认设置。

在隐藏层中,线条由神经元之间连接的权重来着色。蓝色表示正权重,这意味着网络正在使用给定的神经元输出。橙色线表示网络正在分配负权重。

在输出图层中,点根据其原始值显示为橙色或蓝色。背景颜色显示网络对特定区域的预测。颜色的强度显示了预测的可信度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

上图是我们将查看各个训练点的地方,您可以选择查看测试数据或离散化输出。

让我们运行网络 101 个纪元。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

在运行了 101 个时期之后,我们可以注意到损失已经显著减少,并且执行了几乎完美的分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者截图

运行 300 个历元后,我们可以看到损耗降低到几乎可以忽略不计。

有很多不同的选择可以尝试,我强烈建议你们都去尝试一下。关于 TensorFlow 游乐场的简短说明和指南到此结束。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Robynne Hu 在 Unsplash 上的照片

结论:

TensorFlow 游乐场是以直观有趣的方式开始深度神经网络的最佳方式之一。你可以重新利用它,因为它在 GitHub 上是完全开源的,希望它能让神经网络更容易访问和学习。你可以按照他们的 Apache 许可以任何方式自由使用它。如果您有任何关于添加或更改的建议,您可以在这里让他们知道

对所有 TensorFlow 开发人员为这个令人惊叹的项目和他们所做的所有其他令人敬畏的项目大声喊出来。我希望你们在学习如何使用 TensorFlow 游乐场的基础知识的同时,喜欢阅读这篇文章。

点击这里查看我的其他文章:

[## 神经网络的完整有趣和复杂的历史!

重温人工神经网络发展背后的迷人历史

towardsdatascience.com](/the-complete-interesting-and-convoluted-history-of-neural-networks-2764a54e9e76) [## Python 从头编码:没有任何机器学习库的矩阵乘法!

从零开始了解如何在没有任何机器学习库的情况下实现矩阵乘法!

towardsdatascience.com](/python-coding-from-scratch-matrix-multiplication-without-any-machine-learning-libraries-463624fe8726) [## 10+牛逼 Python 编辑器的简明指南,以及如何选择最适合你的编辑器…

帮助您在各种 python 开发环境中进行选择的简明指南

towardsdatascience.com](/a-concise-guide-of-10-awesome-python-editors-and-how-to-choose-which-editor-suits-you-the-best-465c9b232afd) [## 5 个常见的 Python 错误以及如何避免它们!

从初学者到专家,每个人在 python 和机器学习中都容易出现这些错误。

towardsdatascience.com](/5-common-python-errors-and-how-to-avoid-them-63d9afc1a58f) [## 5 个关于 Python、机器学习和深度学习的超棒的计算机视觉项目创意!

讨论 5 个很酷的计算机视觉项目,学习新的技能,增强你的简历

towardsdatascience.com](/5-awesome-computer-vision-project-ideas-with-python-machine-learning-and-deep-learning-721425fa7905)

非常感谢你阅读这篇文章,我希望你们都有美好的一天!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值