2018-02-23 14:01:37 github_37472200 阅读数 343
  • CTO讲堂:海量日志分析智能运维

    大数据分析正在被广泛应用,大数据里90%都是非结构化数据。日志是重要的非结构化数据,日志无处不在,所以能够从日志里面挖掘的价值非常高,可用于运维监控、安全审计、用户数据以及业务数据分析。那么,如何大限度发挥日志的价值成为业内人士研究思考多的问题之一。拥有19年IT经验的日志易创始人兼CEO陈军为大家分享当前海量日志分析的相关应用场景、技术难点以及趋势发展等。

    2640 人正在学习 去看看 CSDN讲师

深度学习日记

第一章:

有监督学习

 是指人们在获得训练的向量数据后在没有标签的情况下尝试找出其内部蕴含关系的一种挖掘工作,这个过程中使用者除了可能要设置一些必要的超参数(hyper-parameter)以外,不用对这些样本做任何的标记甚至是过程干预;

无监督学习

  每一个样本都有着明确的标签,最后我们只是要总结出这些训练样本向量与标签的映射关系

聚类(clustering)
  • 一种典型的“无监督学习”,是把物理对象或抽象对象的集合分组为由彼此类似的对象组成的多个类的分析过程。
    人类天生具备这种归纳和总结的能力,能够把认知的相似事物放到一起作为一类事物,它们之间可以有彼此的不同,但是有一个我们心里的“限度”,只要在这个限度内,特征稍有区别并无大碍,它们仍然还是这一类事物。
  • 比较常用的聚类算法有K-Means、DBSCAN等几种,基本思路都是利用每个向量之间的“距离”——空间中的欧氏距离或者曼哈顿距离,从远近判断是否从属于同一类别

  在用机器做聚类学习的时候,我们每种算法都对应有相应的计算原则,可以把输入的各种看上去彼此“相近”的向量分在一个群组中。然后下一步,人们通常更有针对性地去研究每一组聚在一起的对象所拥有的共性以及那些远离各个群组的孤立点——这种孤立点研究在刑侦、特殊疾病排查等方面都有应用。在这个过程中,从获得到具体的样本向量,到得出聚类结果,人们是不用进行干预的,这就是“非监督”一词的由来。

回归


  • 线性回归

  • 所谓线性回归,就是在观察和归纳样本的过程中认为向量和最终的函数值呈现线性的关系。而后设计这种关系为:y=f(x)=wx+b
  • 非线性回归
  • 非线性回归类中,在机器学习领域应用最多的当属逻辑回归。它和线性回归都叫回归,但是逻辑回归看上去更像分类。我们先在回归这一节提一下这种回归的工作方式。与前面我们说的线性回归不同,在这种模型中观察者假设的前提是y只有两种值:一种是1,一种是0,或者说“是”或“否”的这种判断。

分类


  • 分类是机器学习中使用的最多的一大类算法,我们通常也喜欢把分类算法叫做“分类器”。这个说法其实也非常形象,在我们看来,这就是一个黑盒子,有个入口,有个出口。我们在入口丢进去一个“样本”,在出口期望得到一个分类的“标签”。

  • 第一,输入样本和分类标签。
  • 第二,建立映射假说的某个y=f(x)的模型。
  • 第三,求解出全局的损失函数Loss和待定系数w的映射关系,Loss=g(w)。
  • 第四,通过迭代优化逐步降低Loss,最终找到一个w能使召回率和精确率满足当前场景需要。注意,这里尤其指在验证数据集上的表现。

总结


  • 聚类:把多个多种不同对象的特征都抽取出来,获取一个限度(标准),把近似值的对象放进同一个群组,从获得到具体的样本向量,到得出聚类结果
  • 回归:个人感觉是聚类的延伸应用,线性回归是对聚类结果的校正,而非线性回归是对聚类结果在实际中的应用。
  • 分类:


  • KNN(最近邻算法)

  • 上面都是在网上根据关键字找的资料。
  • 第一章概念较强,但没有什么太难懂东西,如果有什么看不懂的,反复看上几遍,然后再想想
  • 不要给我赞,不要给我赞,不要给我赞,原因我就不说了。
  • 第二章:

    激励函数


    • Sigmoid函数
    • Tanh函数
    • ReLU函数
    • Linear函数
    • 神经网络
    • 深度神经网络

    • 反正我是看着目录看完本章节的

    第三章:


    • Python3.6可直接下载。exe文件直接安装
    • 安装python时记得选中PIP
    • 然后使用pip安装TensorFlow:pip install TensorFlow
    • Python编译器建议使用PyCharm 作为Android Studio的兄弟编译器有很多共同点,相信你很快就会上手

    以上是安装,还有作者推荐的:Anaconda 它集成了python的环境和通用包,就像以前es集成环境,但是该折腾还是得折腾

  • 多环境与集群支持
    + 首先,TensorFlow支持在PC的CPU环境、GPU环境甚至是安卓环境中运行。它不仅可以支持在单个计算单元(一颗CPU的多核心或一颗GPU的多核心)上进行运算,也支持一台机器上多个CPU或多个GPU上并行计算。可以在网络上的所有计算机都参与计算,但是如果计算量小的那就得不偿失了,因为数据传输也是需要时间的。
  • TensorBoard——看得见的训练
    + TensorFlow有一个比较友好的组件,它可以让工作人员在训练网络的过程中通过仪表盘看到网络目前的表现情况。
    + #启动: tensorboard –logdir=path/to/logs
  • TensorFlow Serving——模型
    + TensorFlow Serving系统非常适用于大规模运行能够基于真实情况的数据并会发生动态改变的多重模型。它能够实现:
    • 模型生命周期管理。
    • 使用多重算法进行试验。
    • GPU资源有效使用。
    • 如何选择好的框架
    • 从三个方面:性能、使用人数、支持的语言
    2019-11-26 19:33:09 qq_41132565 阅读数 15
    • CTO讲堂:海量日志分析智能运维

      大数据分析正在被广泛应用,大数据里90%都是非结构化数据。日志是重要的非结构化数据,日志无处不在,所以能够从日志里面挖掘的价值非常高,可用于运维监控、安全审计、用户数据以及业务数据分析。那么,如何大限度发挥日志的价值成为业内人士研究思考多的问题之一。拥有19年IT经验的日志易创始人兼CEO陈军为大家分享当前海量日志分析的相关应用场景、技术难点以及趋势发展等。

      2640 人正在学习 去看看 CSDN讲师

    吴恩达 神经网络和深度学习 第二周

    一些在看视频和做课后题过程中学到的用通俗的语言记下来怕自己忘

    np.random.rand() 生成的数据是零到一之间
    np.random.randn() 生成的数据是从标准正态分布中随机取的
    np.exp(x) e的x次幂
    np.array() 生成数组,shape自己定,数据自己填;并且array生成的数组可以被依次执行操作,比如依次求幂,

    import numpy as np
    a = np.array([1,2,3])
    x = np.exp(a)
    print(x)
    ----------------------------------------------
    [ 2.71828183  7.3890561  20.08553692]
    

    全都加上某个数,

    import numpy as np
    a = np.array([3,4,5])
    print(a+10)
    ----------------------------------------------
    [13 14 15]
    

    如果有一向量v的shape是(a,b,c),要把v reshape成(a*b,c),应该这样写

    import numpy as np
    v = np.ones(2,3,4)
    print(v)
    v = v.reshape((v.shape[0]*v.shape[1],v.shape[2])) 
    ##v.shape读取维数  v.shape[0]=a  v.shape[1]=b v.shape[2]=c
    print(v)
    ----------------------------------------------
    [[[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]
    
     [[1. 1. 1. 1.]
      [1. 1. 1. 1.]
      [1. 1. 1. 1.]]]
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
    

    np.linalg.norm(x, ord=None, axis=None, keepdims=False) 对矩阵里的数据求范数(数据归一化用得到), x表示要被操作的矩阵,引用一张图,axis为0的时候求竖着的,为1的时候求横着的,keepdims设置成True保持形状,False还没试

    ————————————————
    版权声明:本文为CSDN博主「IIYMGF」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hqh131360239/article/details/79061535
    在这里插入图片描述

    A.sum(axis=0) 列求和,axis=1行求和

    import numpy as np
    v = np.ones((3,8))
    print(v)
    a = v.sum(axis=0)
    b = v.sum(axis=1)
    
    print(a)
    
    print(b)
    ---------------------------------------
    [[1. 1. 1. 1. 1. 1. 1. 1.]
     [1. 1. 1. 1. 1. 1. 1. 1.]
     [1. 1. 1. 1. 1. 1. 1. 1.]]
    [3. 3. 3. 3. 3. 3. 3. 3.]
    [8. 8. 8.]
    

    本人所写都是为了给自己查阅,用词不准确只求自己能看懂回忆起来,有错误欢迎指出我会尽快更正。

    2019-12-31 20:26:23 sz3321 阅读数 41
    • CTO讲堂:海量日志分析智能运维

      大数据分析正在被广泛应用,大数据里90%都是非结构化数据。日志是重要的非结构化数据,日志无处不在,所以能够从日志里面挖掘的价值非常高,可用于运维监控、安全审计、用户数据以及业务数据分析。那么,如何大限度发挥日志的价值成为业内人士研究思考多的问题之一。拥有19年IT经验的日志易创始人兼CEO陈军为大家分享当前海量日志分析的相关应用场景、技术难点以及趋势发展等。

      2640 人正在学习 去看看 CSDN讲师

    1 数据流

    根据任务需要读取数据
    包括:(原始数据-可以输入模型的数据)
    数据的组织形式: one task需要的数据形式
    数据内容: 需要什么样的预处理 如:归一,数据增强等

    数据输入模型前需要部署到cuda上

    Variable(samples).cuda(GPU)
    

    2 模型

    定义模型

    将模型定义在一个类中
    通常有init(模型初始化)forward(执行模型–前向传播)方法
    该类继承nn.Module,可以调用nn.module中的属性或方法

    class RelationNetwork(nn.Module):
        def __init__(self,input_size,hidden_size):
            super(RelationNetwork, self).__init__()
            self.layer1 = nn.Sequential(
                            nn.Conv2d(128,64,kernel_size=3,padding=0),
                            nn.BatchNorm2d(64, momentum=1, affine=True),
                            nn.ReLU(),
                            nn.MaxPool2d(2))
            self.layer2 = nn.Sequential(
                            nn.Conv2d(64,64,kernel_size=3,padding=0),
                            nn.BatchNorm2d(64, momentum=1, affine=True),
                            nn.ReLU(),
                            nn.MaxPool2d(2))
            self.fc1 = nn.Linear(input_size*3*3,hidden_size)
            self.fc2 = nn.Linear(hidden_size,1)
    
        def forward(self,x):
            out = self.layer1(x)
            out = self.layer2(out)
            out = out.view(out.size(0),-1)
            out = F.relu(self.fc1(out))
            out = F.sigmoid(self.fc2(out))
            return out
    

    初始化模型

    创建模型类实例,会自动调用init方法,进行模型初始化

    relation_network = RelationNetwork(FEATURE_DIM,RELATION_DIM)
    

    打印模型

    print(relation_network)
    

    权值初始化(可选)

    自定义初始化

    feature_encoder.apply(weights_init)
    

    加载预训练

        if os.path.exists(str("./models/miniimagenet_relation_network_"+ str(CLASS_NUM) +"way_" + str(SAMPLE_NUM_PER_CLASS) +"shot.pkl")):
            relation_network.load_state_dict(torch.load(str("./models/miniimagenet_relation_network_"+ str(CLASS_NUM) +"way_" + str(SAMPLE_NUM_PER_CLASS) +"shot.pkl")))
            print("load relation network success")
    

    部署到cuda

    relation_network.cuda(GPU)
    

    执行模型–前向传播

    relations = relation_network(relation_pairs)
    

    模型设置为训练模式

    feature_encoder.zero_grad()
    

    模型设置为测试模式

    存储模型

    torch.save(relation_network.state_dict(),str("./models/miniimagenet_relation_att_network_"+ str(CLASS_NUM) +"way_" + str(SAMPLE_NUM_PER_CLASS) +"shot_"+str(episode)+".pkl"))
    

    3 优化

    定义优化器

    relation_network_optim = torch.optim.Adam(relation_network.parameters(),lr=LEARNING_RATE)
    

    学习率时刻表

    relation_network_scheduler = StepLR(relation_network_optim,step_size=100000,gamma=0.5)
    

    执行优化器(时刻表)

    feature_encoder_scheduler.step(episode)

    计算损失

    mse = nn.MSELoss().cuda(GPU)
    
    loss = mse(relations,one_hot_labels)
    

    反向传播

    loss.backward()
    

    梯度截断

    torch.nn.utils.clip_grad_norm(relation_network.parameters(),0.5)
    

    执行优化

    relation_network_optim.step()
    

    4 损失

    5 日志

    ========

    通用代码积累

    常见数据预处理

    复杂模型

    优化器

    学习率调整

    自定义的参数优化设置

    权值加载与存储

    ========

    自己的框架

    数据流模块

    调用某个方法可得到可以输入模型的数据

    模型定义模块

    创建模型实例等于创建模型,调用forward方法等于执行模型

    模型初始化模块

    损失模块

    *run模块

    调用方法得到可以输入模型的数据–用数据流模块

    • 数据部署到cuda

    创建模型实例–用模型定义模块

    模型初始化–用模型初始化模块

    模型部署到cuda

    定义优化器

    定义优化器时刻表

    执行优化器(时刻表)

    执行模型–前向传播

    模型设置为训练模式

    计算损失

    反向传播

    执行优化

    设置模型为测试模式

    计算准确率

    输出日志

    存储模型

    2016-01-23 09:57:54 han____shuai 阅读数 1057
    • CTO讲堂:海量日志分析智能运维

      大数据分析正在被广泛应用,大数据里90%都是非结构化数据。日志是重要的非结构化数据,日志无处不在,所以能够从日志里面挖掘的价值非常高,可用于运维监控、安全审计、用户数据以及业务数据分析。那么,如何大限度发挥日志的价值成为业内人士研究思考多的问题之一。拥有19年IT经验的日志易创始人兼CEO陈军为大家分享当前海量日志分析的相关应用场景、技术难点以及趋势发展等。

      2640 人正在学习 去看看 CSDN讲师
    机器学习:machine learning,是计算机科学统计学的交叉学科,基本目标是学习一个x->y的函数(映射),来做分类或者回归的工作。之所以经常和数据挖掘合在一起讲是因为现在好多数据挖掘的工作是通过机器学习提供的算法工具实现的,例如广告的ctr预估,PB级别的点击日志在通过典型的机器学习流程可以得到一个预估模型,从而提高互联网广告点击率和回报率;个性化推荐,还是通过机器学习的一些算法分析平台上的各种购买,浏览和收藏日志,得到一个推荐模型,来预测你喜欢的商品。
    
    深度学习:deep learning,机器学习里面现在比较火的一个topic,本身是神经网络算法的衍生,在图像,语音等富媒体的分类和识别上取得了非常好的效果,所以各大研究机构和公司都投入了大量的人力做相关的研究和开发。
    对于SGD算法而言,
    (1)batch太小:计算效率低(不能很好地利用矩阵乘法的加速功能),模型训练可能不稳定
    (2)batch太大:模型收敛慢(过一遍数据,batch越大,参数更新的次数越小)
    一般的做法是以2的倍数进行试验,选择最合适的一个。例如:16, 32, 64, 128……

    2020-02-24 18:31:50 qq_42246380 阅读数 27
    • CTO讲堂:海量日志分析智能运维

      大数据分析正在被广泛应用,大数据里90%都是非结构化数据。日志是重要的非结构化数据,日志无处不在,所以能够从日志里面挖掘的价值非常高,可用于运维监控、安全审计、用户数据以及业务数据分析。那么,如何大限度发挥日志的价值成为业内人士研究思考多的问题之一。拥有19年IT经验的日志易创始人兼CEO陈军为大家分享当前海量日志分析的相关应用场景、技术难点以及趋势发展等。

      2640 人正在学习 去看看 CSDN讲师

    一、优化:

    1.优化与深度学习不同之处

    • 优化方法目标:训练集损失函数值
    • 深度学习目标:测试集损失函数值(泛化性)

    2.优化在深度学习中的挑战

    • 局部最小值
    • 鞍点
    • 梯度消失

    二、梯度下降

    1.批量梯度下降和随机梯度下降

    批量梯度下降—最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。
    随机梯度下降—最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。

    三、数据增强

    1.图像增广

    大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。图像增广的另一种解释是,随机改变训练样本可以降低模型对某些属性的依赖,从而提高模型的泛化能力。例如,我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度、色彩等因素来降低模型对色彩的敏感度。可以说,在当年AlexNet的成功中,图像增广技术功不可没。本节我们将讨论这个在计算机视觉里被广泛使用的技术。

    2.常用的图像增广方法

    • 翻转和裁剪
    • 变化颜色
    • 叠加多个图像的增广方法

    3.图像增广的作用

    下列不属于图像增广的作用的是:B
    A.缓解过拟合
    B.缓解欠拟合
    C.增加模型泛化能力
    D.通过旋转/翻转等方式可以降低对某些属性的依赖。
    选项二:错误,欠拟合普遍原因是模型对于数据过于简单,因此图像增广不能缓解欠拟合,但是能缓解过拟合,通过加入相似的图片也能 提高泛化能力和减小对某些无关属性如图片方向、大小的依赖。

    四、模型微调

    1.迁移学习

    迁移学习(transfer learning),将从源数据集学到的知识迁移到目标数据集上。例如,虽然ImageNet数据集的图像大多跟椅子无关,但在该数据集上训练的模型可以抽取较通用的图像特征,从而能够帮助识别边缘、纹理、形状和物体组成等。这些类似的特征对于识别椅子也可能同样有效。

    2.模型微调

    微调是迁移学习中一种常用技术。
    • 在源数据集(如ImageNet数据集)上预训练一个神经网络模型,即源模型。
    • 创建一个新的神经网络模型,即目标模型。它复制了源模型上除了输出层外的所有模型设计及其参数。我们假设这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。我们还假设源模型的输出层跟源数据集的标签紧密相关,因此在目标模型中不予采用。
    • 为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。
    • 在目标数据集(如椅子数据集)上训练目标模型。我们将从头训练输出层,而其余层的参数都是基于源模型的参数微调得到的。

    五、优化算法进阶

    1.下列算法中哪个没有使用到Exponential Moving Average:C
    A.RMSProp
    B.Adam
    C.Adagrad
    D.SGD Momentum
    解释:
    选项1: RMSProp的自适应学习率分母使用了EMA
    选项2: Adam自适应学习率的分子和分母都使用了EMA
    选项3: Adagrad的自适应学习率没有使用EMA,而是对梯度平方进行累加,因而存在梯度消失的问题
    选项4: Momentum也即对梯度计算EMA

    2.下列关于RMSProp, AdaGrad, AdaDelta, Adam等高阶优化算法的说法错误的是:D
    A.RMSProp利用Exponential Moving Average解决了Adagrad梯度消失的问题
    B.AdaGrad出现梯度消失的原因是自适应学习率分母的不断累加使其存在最终趋于0的可能
    C.AdaDelta是基于RMSProp的改进算法,其只有一个超参数
    D.Adam没有使用Momentum算法
    解释:
    选项1: 正确,RMSProp不是直接对梯度平方进行累加,而是使用EMA对上一时刻的自适应学习率的分母进行衰减
    选项2: 正确,当梯度一直不为0时,Adagrad的自适应学习率的分母会不断累加,使自适应学习率趋于0,出现梯度消息的问题
    选项3: 正确,Adelta是基于RMSprop的改进,只需传入EMA的衰减参数
    选项4: 错误,Adam使用了Momentum算法,其是RMSProp与Momentum的结合
    3.下列关于Adam的说法错误的是:D
    A.Adam使用了Exponential Moving Average
    B.Adam对大小相差很大数量级的梯度都可以rescale到相近的大小
    C.Adam是RMSProp和Momentum算法的结合,并对EMA权重进行了无偏操作
    D.Adam使用了两次Exponential Moving Average,并且二者使用相同的衰减参数
    解释:
    选项2: 正确,Adam算法中的 m_tmt 和 v_tvt (原文符号)分别是梯度的一阶矩和二阶矩估计,二者相比,可以使更新量rescale到1的附近。
    选项4: 错误,m_tmt 和 v_tvt 均使用了EMA,但是二者的衰减参数并不相同

    六、词嵌入基础word2vec

    1.one-hot 向量表示单词

    我们在“循环神经网络的从零开始实现”一节中使用 one-hot 向量表示单词,虽然它们构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot 词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。

    2.Word2Vec 词嵌入工具

    Word2Vec 词嵌入工具的提出正是为了解决上面这个问题,它将每个词表示成一个定长的向量,并通过在语料库上的预训练使得这些向量能较好地表达不同词之间的相似和类比关系,以引入一定的语义信息。基于两种概率模型的假设,我们可以定义两种 Word2Vec 模型:

    2.1Skip-Gram 跳字模型:

    假设背景词由中心词生成,即建模 P(wo∣wc),其中 wc 为中心词,wo 为任一背景词;

    2.2CBOW (continuous bag-of-words) 连续词袋模型:

    假设中心词由背景词生成,即建模 P(wc∣Wo),其中 Wo 为背景词的集合。

    六、词嵌入进阶

    在“Word2Vec的实现”一节中,我们在小规模数据集上训练了一个 Word2Vec 词嵌入模型,并通过词向量的余弦相似度搜索近义词。虽然 Word2Vec 已经能够成功地将离散的单词转换为连续的词向量,并能一定程度上地保存词与词之间的近似关系,但 Word2Vec 模型仍不是完美的,它还可以被进一步地改进:

    1.子词嵌入(subword embedding)

    FastText 以固定大小的 n-gram 形式将单词更细致地表示为了子词的集合,而 BPE (byte pair encoding) 算法则能根据语料库的统计信息,自动且动态地生成高频子词的集合;

    2.GloVe 全局向量的词嵌入

    通过等价转换 Word2Vec 模型的条件概率公式,我们可以得到一个全局的损失函数表达,并在此基础上进一步优化模型。

    没有更多推荐了,返回首页