泳鱼
泳鱼
## 一、卷积神经网络简介 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算的前馈神经网络,是基于图像任务的平移不变性(图像识别的对象在不同位置有相同的含义)设计的,擅长应用于图像处理等任务。在图像处理中,图像数据具有非常高的维数(高维的RGB矩阵表示),因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。  对于高维图像数据,卷积神经网络利用了卷积和池化层,能够高效提取图像的重要“特征”,再通过后面的全连接层处理“压缩的图像信息”及输出结果。对比标准的全连接网络,卷积神经网络的模型参数大大减少了。  ## 二、卷积神经网络的“卷积” ### 2.1 卷积运算的原理 在信号处理、图像处理和其它工程/科学领域,卷积都是一种使用广泛的技术,卷积神经网络(CNN)这种模型架构就得名于卷积计算。但是,深度学习领域的“卷积”本质上是信号/图像处理领域内的互相关(cross-correlation),互相关与卷积实际上还是有些差异的。 **卷积**是分析数学中一种重要的运算。简单定义f , g 是可积分的函数,两者的卷积运算如下:  其定义是两个函数中一个函数(g)经过反转和位移后再相乘得到的积的积分。如下图,函数 g 是过滤器。它被反转后再沿水平轴滑动。在每一个位置,我们都计算 f 和反转后的 g 之间相交区域的面积。这个相交区域的面积就是特定位置出的卷积值。  **互相关**是两个函数之间的滑动点积或滑动内积。互相关中的过滤器**不经过反转**,而是直接滑过函数 f,f...
距离(distance,差异程度)、相似度(similarity,相似程度)方法可以看作是以某种的距离函数计算元素间的距离,这些方法作为机器学习的基础概念,广泛应用于如:Kmeans聚类、协同过滤推荐算法、相似度算法、MSE损失函数等等。本文对常用的距离计算方法进行归纳以及解析,分为以下几类展开: ### 一、闵氏距离(Minkowski Distance)类 - 闵氏距离(Minkowski Distance) 对于点x=(x1,x2...xn) 与点y=(y1,y2...yn) , 闵氏距离可以用下式表示:  闵氏距离是对多个距离度量公式的概括性的表述,p=1退化为曼哈顿距离;p=2退化为欧氏距离;切比雪夫距离是闵氏距离取极限的形式。 - 曼哈顿距离(Manhattan Distance)VS 欧几里得距离(Euclidean Distance) 曼哈顿距离 公式:  欧几里得距离公式:  如下图蓝线的距离即是曼哈顿距离(想象你在曼哈顿要从一个十字路口开车到另外一个十字路口实际驾驶距离就是这个“曼哈顿距离”,此即曼哈顿距离名称的来源,也称为城市街区距离),红线为欧几里得距离:  - 切比雪夫距离(Chebyshev Distance) 切比雪夫距离起源于国际象棋中国王的走法,国际象棋中国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1,y1)走到B格(x2,y2)最少需要走几步?你会发现最少步数总是max(|x2-x1|,|y2-y1|)步。有一种类似的一种距离度量方法叫切比雪夫距离。 ...
循环神经网络(RNN)是基于序列数据(如语言、语音、时间序列)的递归性质而设计的,是一种反馈类型的神经网络,其结构包含环和自重复,因此被称为“循环”。它专门用于处理序列数据,如逐字生成文本或预测时间序列数据(例如股票价格)。  ## 一、 RNN 网络类型 RNN以输入数m对应输出数n的不同,可以划分为5种基础结构类型:  (1)one to one:其实和全连接神经网络并没有什么区别,这一类别算不上 RNN。 (2)one to many:输入不是序列,输出是序列。可用于按主题生成文章或音乐等。 (3)many to one:输入是序列,输出不是序列(为单个值)。常用于文本分类。 (4)many to many:输入和输出都是不定长的序列。这也就是Encoder-Decoder结构,常用于机器翻译。 (5)many to many(m==n):输入和输出都是等长的序列数据。这是 RNN 中最经典的结构类型,常用于NLP的命名实体识别、序列预测,本文以此为例具体展开。 ## 二、RNN原理 关于RNN模型,我们还是从数据、模型、学习目标、优化算法这几个要素展开解析,使用过程需要重点关注的是其输入和输出的差异(本节以经典的m==n的RNN结构为例): ###...
# 前言 谈到人工智能(AI)算法,常见不外乎有两方面信息:铺天盖地各种媒体提到的高薪就业【贩卖课程】、知乎上热门的算法岗“水深火热 灰飞烟灭”的梗【贩卖焦虑】。 其实,这两方面都是存在的,但都很片面,这里不加赘述。客观地说,数字化、智能化是人类社会发展的趋势,而当下人工智能无疑是一大热门,那是蓝海还是火海?我们回到老道理—水的深度,只有你自己去试试水才知道。 当你对上面情况有了初步的了解并想试试水,需要面对的问题是:AI入门容易吗? 答案其实是否定的,难!AI领域需要钻研算法原理、大量复杂的公式及符号、无所适从的项目都是劝退一时热度初学者的原因。但这些原因对于一个初学者,根本上是面对这样困难的学科却缺乏合适方法导致的。反问一个玩笑,程序员怎么会没有方法呢?随手就定义一个Python方法(funtion) ```Python def funtion(): return 'haha,往下继续看' ``` 回到笔者,一名普普通通的程序员,当初也是误打误撞学习Python入门到机器学习、深度学习,至今有4个年头,踩了很多坑,下文说到的学习方法、路径也就填坑试错的经验罢了。 本文适用于AI领域了解不深、有些(高中+)基础知识且有自学兴趣的同学。对于已上岸的同学有兴趣就跳着看吧。 以下为正文: --- # 一、学习方法 说到学习方法,其实我们谈到的人工智能之所以智能,核心在于有学习能力。而人工智能学习过程有两个要素: 1、学习目标是什么(--什么目标函数)? 2、如何达到目标(--什么算法)? 人工智能领域很多思路和人类学习是很共恰的!可以发现这两个问题也是我们学习这门学科需要回答的。 - **学习目标是什么?** 我们的学习目标比较清楚,就是入门人工智能领域,能完成一个AI相关的任务,或者找到相关的工作。 - **如何达到目标?** 1、入门人工智能是个宽泛的目标,因此还得 将目标拆分成**阶段性目标才易于执行**,可以对应到下面--学习路线及建议资源的各个节点。...
>逻辑回归由于其简单高效、易于解释,是工业应用最为广泛的模型之一,比如用于金融风控领域的评分卡、互联网的推荐系统。上文总结了逻辑回归的原理及其实现[【全面解析并实现逻辑回归(Python)】](https://mp.weixin.qq.com/s/w824fCjZ8OHr5jawlhOpaQ)。 >本文从实际应用出发,以数据特征、优化算法、模型优化等方面,全面地归纳了逻辑回归(LR)优化技巧。 ### 一、LR的特征生成 逻辑回归是简单的广义线性模型,模型的拟合能力很有限,无法学习到特征间交互的非线性信息:一个经典的示例是LR无法正确分类非线性的XOR数据,而通过引入非线性的特征(特征生成),可在更高维特征空间实现XOR线性可分。  ``` # 生成xor数据 import pandas as pd xor_dataset = pd.DataFrame([[1,1,0],[1,0,1],[0,1,1],[0,0,0]],columns=['x0','x1','label']) x,y = xor_dataset[['x0','x1']], xor_dataset['label'] xor_dataset.head() # keras实现逻辑回归 from keras.layers import * from keras.models import...
>本文以模型、学习目标、优化算法的角度解析逻辑回归(LR)模型,并以Python从头实现LR训练及预测。 ## 一、逻辑回归模型结构 逻辑回归是一种广义线性的分类模型且其模型结构可以视为**单层的神经网络**,由一层输入层、一层仅带有一个sigmoid激活函数的神经元的输出层组成,而无隐藏层。其模型的功能可以简化成两步,**“通过模型权重[w]对输入特征[x]线性求和+sigmoid激活输出概率”**。具体来说,我们输入数据特征x,乘以一一对应的模型权重w后求和,通过输出层神经元激活函数σ(sigmoid函数)将(wx + b)的计算后非线性转换为0~1区间的概率数值后输出。学习训练(优化模型权重)的过程是通过梯度下降学到合适的模型权重[W],使得模型输出值Y=sigmoid(wx + b)与实际值y的误差最小。 >附注:sigmoid函数是一个s形的曲线,它的输出值在[0, 1]之间,在远离0的地方函数的值会很快接近0或1。对于sigmoid输出作为概率的合理性,可以参照如下证明:  逻辑回归是一种判别模型,为直接对条件概率P(y|x)建模,假设P(x|y)是高斯分布,P(y)是多项式分布,如果我们考虑二分类问题,通过公式变换可以得到:  可以看到,逻辑回归(或称为对数几率回归)的输出概率和sigmoid形式是一致的。 逻辑回归模型本质上属于广义线性分类器(决策边界为线性)。这点可以从逻辑回归模型的决策函数看出,决策函数Y=sigmoid(wx + b),当wx+b>0,Y>0.5;当wx+b
本文将总结机器学习最常见的模型评估指标。训练学习好的模型,通过客观地评估模型性能,才能更好实际运用决策。模型评估主要有:预测误差情况、拟合程度、模型稳定性等方面。还有一些场景对于模型训练\预测速度(吞吐量)、计算资源耗用量、可解释性等也会有要求,这里不做展开。 ## 一、评估预测误差情况 机器学习模型预测误差情况通常是评估的重点,它不仅仅是学习过程中对训练数据有良好的学习预测能力,根本上在于要对新数据能有很好的预测能力(泛化能力),所以我们常通过测试集的指标表现评估模型的泛化性能。 评估模型的预测误差常用损失函数作为指标来判断,如回归预测的均方损失。但除此之外,用损失函数作为评估指标并不直观(如像分类任务的评估还常用f1-score,可以直接展现各种类别正确分类情况)且还有一些局限性。在此,我们主要对回归和分类预测任务分别解读其常用误差评估指标。 ### 1.1 回归任务的误差评估指标 评估回归模型的误差,比较简单的思路,可以对真实值与预测值的差异“取正”后求平均。如下: - 均方误差(MSE) 均方误差(MSE)为实际值与预测值的差值取平方求平均。其中y是实际值,y^ 是预测值  - 均方根误差(RMSE) 均方根误差(RMSE)是对MSE的开根号  - 平均绝对误差(MAE) 平均绝对误差(MAE)是预测值与真实值之间的误差取绝对值的平均  由于MAE用到了绝对值(不可导),很少用在训练的损失函数。用于最终评估模型还是可以的。 - 均方根对数误差(RMSLE)  **上述指标的差异对比:** ① 异常值敏感性:MAE也就是真实预测误差,而RMSE,MSE都有加平方,放大了较大误差样本的影响(**对于异常值更敏感**),如果遇到个别偏离程度非常大的离群点时,即便数量很少,也会让这两个指标变得很差。减少异常点的影响,可以采用RMSLE,它关注的是预测误差的比例,即便存在离群点,也可以降低这些离群点的影响。 ②...
本文详细地梳理及实现了深度学习模型构建及预测的全流程,代码示例基于python及神经网络库keras,通过设计一个深度神经网络模型做波士顿房价预测。主要依赖的Python库有:keras、scikit-learn、pandas、tensorflow(建议可以安装下anaconda包,自带有常用的python库) ## 一、基础介绍 - 机器学习 机器学习的核心是通过模型从数据中学习并利用经验去决策。进一步的,机器学习一般可以概括为:从数据出发,选择某种模型,通过优化算法更新模型的参数值,使任务的指标表现变好(学习目标),最终学习到“好”的模型,并运用模型对数据做预测以完成任务。由此可见,机器学习方法有四个要素:**数据、模型、学习目标、优化算法**。具体可见系列文章:[一篇白话机器学习概念](https://mp.weixin.qq.com/s/wS40NkZwkPnJK-RciYLk-A) - 深度学习 深度学习是机器学习的一个分支,它是使用多个隐藏层**神经网络模型**,通过大量的向量计算,学习到数据内在规律的高阶表示特征,并利用这些特征决策的过程。  - keras简介 本文基于keras搭建神经网络模型去预测,keras是python上常用的神经网络库。相比于tensorflow、Pytorch等库,它对初学者很友好,开发周期较快。下图为keras要点知识的速查表(pdf原版到公众号阅读原文后可见):  ## 二、建模流程 深度学习的建模预测流程,与传统机器学习整体是相同的,主要区别在于深度学习是端对端学习,可以自动提取高层次特征,大大减少了传统机器学习依赖的特征工程。如下详细梳理流程的各个节点并附相应代码:  ### 2.1 明确问题及数据选择 #### 2.1.1 明确问题 深度学习的建模预测,首先需要明确问题,即抽象为机器 / 深度学习的预测问题:需要学习什么样的数据作为输入,目标是得到什么样的模型做决策作为输出。 以预测房价为例,我们需要输入:和房价有关的数据信息为特征x,对应的房价为y作为监督信息。再通过神经网络模型学习特征x到房价y内在的映射关系。通过学习好的模型输入需要预测数据的特征x,输出模型预测Y。对于一个良好的模型,它预测房价Y应该和实际y很接近。 #### 2.1.2...
## 一、机器学习的优化 机器学习的优化(目标),简单来说是:搜索模型的一组参数 w,它能显著地降低代价函数 J(w),该代价函数通常包括整个训练集上的性能评估(经验风险)和额外的正则化(结构风险)。 机器学习的优化与传统优化不同,不是简单地根据数据的求解最优解,在大多数机器学习问题中,我们关注的是测试上性能度量P的优化。 - 然而对于模型测试集是未知,我们只能通过优化训练集的性能度量P_train,在独立同分布基础假设下,期望测试集也有较好的性能(泛化效果),这意味并不是一味追求训练集的最优解。 - 另外,有些情况性能度量P(比如分类误差f1-score)并不能高效地优化,在这种情况下,我们通常会优化替代损失函数 (surrogate loss function)。例如,负对数似然通常用作 0 − 1 分类损失的替代。  当我们机器学习的学习目标是极大化降低(经验)损失函数,这点和传统的优化是比较相似的,那么如何实现这个目标呢?我们第一反应可能是直接求解损失函数最小值的公式/解析解(如最小二乘法),获得最优的模型参数。但是,通常机器学习模型的损失函数较复杂,很难直接求最优解。幸运的是,我们还可以通过优化算法(如遗传算法、梯度下降算法、牛顿法等)有限次迭代优化模型参数,以尽可能降低损失函数的值,得到较优的参数值(数值解)。上述去搜索一组最\较优参数解w所使用的算法,即是优化算法。下图优化算法的总结:(图与本文内容较相符,摘自@teekee)  ## 二、优化算法盘点 ### 最小二乘法 最小二乘法常用在机器学习回归模型求解析解(对于复杂的深度神经网络无法通过这方法求解),其几何意义是高维空间中的一个向量在低维子空间的投影。 如下以一元线性回归用最小二乘法求解为例。  其损失函数mse为:  对损失函数求极小值,也就是一阶导数为0。通过偏导可得关于参数a及偏置b的方程组:...
# 一、过拟合的本质及现象 过拟合是指模型只过分地匹配特定训练数据集,以至于对训练集外数据无良好地拟合及预测。其本质原因是模型**从训练数据中学习到了一些统计噪声,即这部分信息仅是局部数据的统计规律**,该信息没有代表性,在训练集上虽然效果很好,但未知的数据集(测试集)并不适用。 ## 1.1 拟合效果的评估方式  通常由训练误差及测试误差(泛化误差)评估模型的学习程度及泛化能力。 **欠拟合**时训练误差和测试误差在均较高,随着训练时间及模型复杂度的增加而下降。在到达一个**拟合最优**的临界点之后,训练误差下降,测试误差上升,这个时候就进入了**过拟合**区域。它们的误差情况差异如下表所示:  ## 1.2 拟合效果的深入分析 对于拟合效果除了通过训练、测试的误差估计其泛化误差及判断拟合程度之外,我们往往还希望了解它为什么具有这样的泛化性能。统计学常用“偏差-方差分解”(bias-variance decomposition)来分析模型的泛化性能:泛化误差为偏差+方差+噪声之和。  **噪声(ε)** 表达了在当前任务上任何学习算法所能达到的泛化误差的下界,即刻画了学习问题本身(客观存在)的难度。 **偏差(Bias)** 是指用所有可能的训练数据集训练出的所有模型的输出值与真实值之间的差异,刻画了模型的拟合能力。偏差较小即模型预测准确度越高,表示模型拟合程度越高。  **方差(Variance)** 是指不同的训练数据集训练出的模型对同预测样本输出值之间的差异,刻画了训练数据扰动所造成的影响。方差较大即模型预测值越不稳定,表示模型(过)拟合程度越高,受训练集扰动影响越大。  如下用靶心图形象表示不同方差及偏差下模型预测的差异: 偏差越小,模型预测值与目标值差异越小,预测值越准确; 方差越小,不同的训练数据集训练出的模型对同预测样本预测值差异越小,预测值越集中;  **“偏差-方差分解”** 说明,模型拟合过程的泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。...