(31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

(31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

第五节课:从零起步通过Adaptive Learning和Feature Normalization优化自己编写的AI框架

本节从零起步通过Adaptive Learning和Feature Normalization优化自己编写的AI框架,人工智能的框架优化及人工智能应用程序开发的优化。人工智能的优化会有很多技术,优化的技术多达几百种,本节分享的是其中的2种方式:Adaptive Learning优化和Feature Normalization优化。

本节分享的具体内容:

(1)    自己编写的AI框架性能测试及问题剖析

(2)    采用Adaptive Learning进行性能优化编码

(3)    使用Feature Normalization

本章节我们将实现自研盘古人工智能框架的性能优化,将新增FeatureNormalization.py.py代码,要实现的目录结构代码如图所示:

www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架
www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

回顾一下前面的内容,TensorFlow的可视化图我们已经反复研究,TensorFlow是目前人工智能工业界和实际运用的领域使用最流行、最广泛,功能最强大的人工智能框架,参照TensorFlow的可视化图,我们在前面的章节中已经实现了整个AI盘古框架的骨架,包括输入层Input Layer、隐藏层Hidden Layers、以及输出层Output Layer;对权重的赋值;Forward  Propagation、Back Propagation算法。

TensorFlow的可视化图中,如果激活函数选择Sigmoid,进行Classification操作,单击运行按钮,发现损失度的降低非常缓慢;如果激活函数选择ReLU,进行Classification操作,单击运行按钮,会发现损失度收敛的速度非常快;如图所示。其他也可以测试Tanh的激活函数,速度也是可以的。

www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架
www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

图 1- 48 Sigmoid 、ReLU激活函数损失度比较

接下来一个很重要的内容是优化,损失度收敛度的问题包含多方面:可能是激活函数的问题;可能是输入数据的问题;也可能是运行的过程中,Back Propagation算法收敛时学习率的问题;由于整个梯度下降的过程中有很多个局部最低点,也可能梯度下降时候达到的是局部极低点,不一定是整个梯度下降的最低点。围绕这些内容会有很多优化的方法,本节讲解的是Adaptive Learning和Feature Normalization优化。

在进行收敛的过程中,先不考虑多个极值点的情况,只考虑有1个最低点的情况,如果步伐太大,收敛时就会出现荡秋千的过程,永远到不了最低点,因为每次的步伐太大,从左侧的一个点跃过了最低点,到达了右侧的一个点,然后下一次收敛的时候,步伐又太大,从右侧的点跃过了最低点,到达了左侧的一个点,如此反复跃到右侧,又跃到左侧......导致的结果是测试很多次,精确度或损失度并没有太大的变化,损失度没有极大的降低,精确度没有极大的提升 此时,如果使用Adaptive Learning优化,将上次损失度的减少和这一次损失度的减少做一个比较,如果步伐太大,就进行调整,将步伐变小一点。

在进行收敛的过程中,如果步伐太小,会导致收敛速度太慢,而做人工智能核心追求是最短的时间内,最快最准确接近实际的情况,第一个是时间的使用,第二个是精确度的使用。无论步伐太大,还是步伐太小,都要进行相应的调整。

关于数据源的问题,在做实际项目的时候,数据拿过来不可以直接使用,要进行数据的预处理操作,但有时候即使数据初步符合你的要求,进行了预处理也还是不够的。如图所示,损失度的计算公式为预测值减去真实值的平方除以2,然后进行累加。

www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架
www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

这个计算公式运用在损失函数的计算,数据进行了初步的处理,使用Sigmoid激活函数,使用Back Propagation的时候对激活函数进去求导,数据如果只有0和1,或者数据包含100、1000、-80....等数据,那这个数据是否是一种最理想最佳的状态?

www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架
www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

Sigmoid的Y轴值区间是0到1,X轴从-4到4之间的变化非常明显,如果X轴小于-4或者大于4,数据不是有效的数据,Y轴变化就不明显了,因此推出了正则化的过程。 我们案例中instances数据中只包含了0和1,有没有必要进行正则化? 其实有必要进行正则化,因为要么是0,要么是1,数据的变化不太明显,如果进行正则化,将0到1之间代表的数据变成-4到4之间的数据,理论上讲会带来更有明显的训练效果,之所以是从理论上讲,是因为人工智能的优化有很多的因素,机器学习或人工智能的专家或者做人工智能应用程序的开发者,他们的大多数时间都在反复调整优化参数。

之所以Adaptive Learning能进行性能优化是因为有时候学习率不太恰当,永远无法达到最低值。

之所以Feature Normalization的正则化优化是因为数据超过了有效处理的范围,或者有效处理的范围太小,不能很好的运用你的算法。Sigmoid函数有效的空间是-4到4之间,也可能使用Softmax函数,其有效空间是-2到2之间。TensorFlow的可视化图中,有很多的激活函数:ReLU、Tanh、Sigmoid、Linear,不同的激活函数的正则化区间不太一样,也可能是高斯分布等。如使用Tanh激活函数,运行的效果也是不错的。

www.zeeklog.com  - (31)第五节课从零起步通过Adaptive Learning和Feature Normalization优化AI框架

Read more

深入理解 Proxy 和 Object.defineProperty

在JavaScript中,对象是一种核心的数据结构,而对对象的操作也是开发中经常遇到的任务。在这个过程中,我们经常会使用到两个重要的特性:Proxy和Object.defineProperty。这两者都允许我们在对象上进行拦截和自定义操作,但它们在实现方式、应用场景和灵活性等方面存在一些显著的区别。本文将深入比较Proxy和Object.defineProperty,包括它们的基本概念、使用示例以及适用场景,以帮助读者更好地理解和运用这两个特性。 1. Object.defineProperty 1.1 基本概念 Object.defineProperty 是 ECMAScript 5 引入的一个方法,用于直接在对象上定义新属性或修改已有属性。它的基本语法如下: javascript 代码解读复制代码Object.defineProperty(obj, prop, descriptor); 其中,obj是目标对象,prop是要定义或修改的属性名,descriptor是一个描述符对象,用于定义属性的特性。 1.2 使用示例 javascript 代码解读复制代码//

By Ne0inhk

Proxy 和 Object.defineProperty 的区别

Proxy 和 Object.defineProperty 是 JavaScript 中两个不同的特性,它们的作用也不完全相同。 Object.defineProperty 允许你在一个对象上定义一个新属性或者修改一个已有属性。通过这个方法你可以精确地定义属性的特征,比如它是否可写、可枚举、可配置等。该方法的使用场景通常是需要在一个对象上创建一个属性,然后控制这个属性的行为。 Proxy 也可以用来代理一个对象,但是相比于 Object.defineProperty,它提供了更加强大的功能。使用 Proxy 可以截获并重定义对象的基本操作,比如访问属性、赋值、函数调用等等。在这些操作被执行之前,可以通过拦截器函数对这些操作进行拦截和修改。因此,通过 Proxy,你可以完全重写一个对象的默认行为。该方法的使用场景通常是需要对一个对象的行为进行定制化,或者需要在对象上添加额外的功能。 对比 以下是 Proxy 和 Object.defineProperty 的一些区别对比: 方面ProxyObject.defineProperty语法使用 new Proxy(target,

By Ne0inhk