-
深度学习一般化过程理解Mindspore docs工程代码:https://gitee.com/mindspore/docs.gitLeNet实例源码位置:*/docs/tutorials/tutorial_code/lenet 接续上一篇的实例实践,通过前面运行MindSpore的LeNet实例代码了解了一个经典的手写字体识别模型在框架中使用的情况,本篇尝试从该代码实例开始,围绕模型为核心来深入分析和总结深度学习的一般化过程以及需要重点掌握的知识点。 从实践来看深度学习的领域“模型”是核心,所有的操作最终都是围绕模型来建立的。通常深度学习应用过程抽象为以下一般过程。1)深度学习应用结构-“输入-处理-输出” 深度学习尽管本身是专属领域的范畴,但是其在应用过程中依然离不开IT通用的化的过程,任何的部署成可执行程序的模式基本的结构都是相通的。 “输入-处理-输出”的结构是通用IT应用的基本结构,对于人工智能的深度学习方法也是同样适用;不同之处人工智能的深度学习方法到能够落地应用通常分为两个关键步骤:模型学习训练(深度学习的学习就凸显在模型的学习训练上,通过规模数据训练学习输出符合要求的模型)模型的推理应用(其中推理会涉及应用的场景化部署,所以可能部署的方式各不同,比如数据中心、边缘等方式)2)核心围绕-“数据” 深度学习离不开数据,所有的模型训练即学习的过程,通过数据的输入处理不断的完善模型,在数据方面涉及规模数据的称呼为“数据集”。通常一个模型要能够到达应用的地步,离不开两类数据集:训练数据集(LeNet例子中MNIST数据集中的train-images-idx3-ubyte和train-labels-idx1-ubyte)测试数据集(LeNet例子中MNIST数据集中的t10k-images-idx3-ubyte和t10k-labels-idx1-ubyte)另外在模型训练完成后:会生成带有训练参数优化的输出的模型文件数据,比如MindSpore中提供的模型输出文件,后续会深入分析。实际部署应用中会涉及相应的模型验证评估和推理处理的请求和输出结果数据,比如图像识别中人脸识别应用,实时捕捉人脸数据作为服务“请求数据”进行识别,以及结果数据的输出。3)深度学习的两个关键过程“模型训练”和“模型推理” 深度学习的学习就体现在学习数据、训练模型上面,通过海量的数据输入结合特定的网络模型来进行训练和学习,最终输出具备一定精准度的模型文件,供后续推理使用。模型训练 在人工智能的深度学习方面,模型是核心,其中基于神经网络构建的模型是当前主流的模型方法,因此模型训练包括如下过程: 1)输入数据的准备;模型训练通常输入数据采用数据集的方式来管理,不同的数据集可能存在不同的格式,后续会介绍MindSpore在数据集处理上提供的核心能力。 2)模型训练过程,根据神经网络先选择定义匹配的网络,结合训练的数据集来训练相应的模型,这个模型是带有某种内置数学手段的输出物,最终会生成模型的文件(存放训练结果的数据)。 3)模型是一个训练的结果输出物,在MindSpore上采用了checkpoints的快照模式,来支持多次训练的输出或者中断时候恢复,同时MindSpore还提供了统一的模型文件MindIR格式,用于部署态不同云、边等环境统一部署。模型评估和推理模型评估 结合数据集和相应的神经网络等训练方法输出相应的模型数据,该模型数据如何评估其准确性和精度,就需要通过模型评估的方法,结合输入的测试数据集(如MNIST数据集中的测试数据集t10k-images-idx3-ubyte和t10k-labels-idx1-ubyte) 评估的结果往往是输出模型的精度,比如图片训练结合测试数据的识别度,精度往往可以通过选择不同的神经网络方法、包括网络参数的调整来提升。模型推理 当模型训练输出后,要进入应用场景时候,需要发布和部署成功输出的模型,通常如果要提供在线服务,都会部署成可以提供在线处理的服务模式,供在线应用。Mindspore框架的相应能力说明官方入门教程地址:https://www.mindspore.cn/tutorial/zh-CN/r1.2/quick_start.ht MindSpore官方网站提供了以LeNet模型为开篇入门教程,总结了Mindspore作为一个深度学习框架在其提供的开放能力之上使用的一般过程。 这里我们借助这个过程来简单分析MindSpore为其使用者提供了哪些核心的能力来支持深度学习的一般化过程。 MindSpore中提供给用户使用的是最上层的高阶API,高阶的API虽然也有java和c++语言提供的,大多数情况下还是以python提供为主。 要完成一个基本的LeNet模型训练及推理,MindSpore中提供的几个基础核心能力应用即可:1)框架上下文(mindspore.context) MindSpore框架的上下文封装,框架提供的相关图模式、PYNATIVE_MODE、并行计算相关的配置都在其中设定,比如前面实例指定LeNet在CPU上运行,默认模式device_target指定为CPU。context.set_context(mode=context.GRAPH_MODE, device_target=args.device_target)2)数据集(mindspore.dataset) MindSpore在数据集方面提供了丰富的能力,dataset中针对不同的数据集的格式都有统一的封装,具体的说明如下。https://www.mindspore.cn/doc/api_python/en/r1.2/mindspore/mindspore.dataset.html 对于LeNet模型实例,选择对应的数据集封装使用“mindspore.dataset.MnistDataset”类即可。3)构建神经网络相关(mindspore.nn) MindSpore在核心的神经网络模型的构建上通过Cell类的基本神经网络单元类来构建最终的网络。比如LeNet中,就采用继承mindspore.nn.Cell的方式来构建,在该类中可以定义各类具体的神经网络方法来训练相应的模型。比如在LeNet中采用Conv2d来定义卷积神经网络的方式来构建网络。class LeNet5(nn.Cell): """Lenet network structure.""" # define the operator required def __init__(self, num_class=10, num_channel=1): super(LeNet5, self).__init__() self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid') self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid') ......4)模型训练、推理相关(mindspore.train) 其中主要的提供的模型训练、推理的核心API封装,LeNet实例中直接使用提供Model封装类即可完成大部分模型训练和推理的操作。比如在LeNet实例中封装的train_net训练模型、test_net评估模型、test_predict推理三个主要方法,内部核心都使用了Model类提供的方法。#提供模型训练APInetwork_model.train(epoch_size, ds_train, callbacks=[ckpoint_cb, LossMonitor()], dataset_sink_mode=sink_mode)#提供模型评估APInetwork_model.eval(ds_eval, dataset_sink_mode=False)#提供模型推理APInetwork_model.predict(Tensor(data['image']))5)输出模型文件相关 在MindSpore的输出模型文件方面,提供了两类核心能力:一类采用类似快照机制,输出训练的过程文件,用于多次训练能够回溯或者中断恢复之前的模型数据处理,在MindSpore中封装在回调mindspore.train.callback中,LeNet实例中如下。每次训练结束都输出一个checkpoint模型文件,可以用于推理处理。# save the network model and parameters for subsequence fine-tuningckpoint = ModelCheckpoint(prefix="checkpoint_lenet", config=config_ck)一类最终发布的模型文件,采用自定义的MindIR格式,目的是为了可以在不同的硬件体系,如云中心或者边缘、终端等体系直接运行。可以基于某个checkpoint模型文件来最终输出。def export_mr(): print("============== Export MindIR ==============") resnet = LeNet5() # load the parameter into net param_dict = load_checkpoint("checkpoint_lenet-1_1875.ckpt") load_param_into_net(resnet, param_dict) input = np.random.uniform(0.0, 1.0, size=[32, 1, 32, 32]).astype(np.float32) export(resnet, Tensor(input), file_name='checkpoint_lenet-2-1_1875', file_format='MINDIR')总结: MindSpore是一个全场景的深度学习框架,全场景体现在其适应云端、边缘、终端等各类基础设施形态上运行;深度学习框架是其总结抽象了深度学习的一般化过程,通过可以被应用开发者使用的API方式开放其支持深度学习应用开发的能力。 下一篇结合LeNet模型实例,来尝试深入理解下神经网络模型是怎么回事。————————————————原文链接:https://blog.csdn.net/wangfengwf/article/details/117596887
-
分布式和并行计算,在计算机领域是非常重要的概念。对于一些行外人来说,总觉得这是一些很简单的工作,但是如果我们纵观计算机的硬件发展史,从CPU到GPU,再到TPU和华为的昇腾(NPU),乃至当下的热点量子计算机(QPU),其实就是一个分布式与并行计算的发展史。从简单的数据并行,到算法并行,到图的并行,最后是量子叠加所带来的物理并行。因此能否做好分布式与并行的技术,很大程度上决定了一个工具的性能上限,本文我们一起来研究一下MindSpore分布式训练的方法。环境部署在前面的博客中,我们探讨过用Docker和Singularity容器等方案来安装MindSpore的CPU版本和GPU版本,感兴趣的读者可以翻一翻这些历史博客。而这篇文章中,我们将默认已经在本地安装好一个MindSpore的GPU环境,以此为前提进行探讨在单机多GPU卡的环境下去使用MindSpore的分布式功能。比较完整的介绍可以参考这个官方地址,里面包含了完整的安装部署和使用的介绍。这里我们仅针对本地Ubuntu的环境介绍基本安装和使用方法。安装openmpi这里一共需要安装2个软件,我们都是采取了源码安装的方法,首先到这个MindSpore给出的下载链接中下载对应版本的源码:按照版本配套我们下载这个4.0.3的 tar.gz的压缩包:下载完成后可以大致的按照这里面的操作指导进行源码安装:安装成功的话运行 mpirun --version可以看到版本号。有这里面有两个需要提醒的点是:1. 解压缩不一定用这里面给出的指令,可以用自己的;2. 如果按照这个指引的prefix,后面需要在 LD_LIBRARY_PATH这个环境变量中加入 /usr/local/lib/这个路径,否则会有一些so库无法被识别。安装NCCLMindSpore在GPU上的分布式通信是采用了NCCL这个工具,同样的我们先去这里面给出的链接找源码包下载安装:这里推荐使用Local的安装方案:找到适配自己的系统版本的软件包之后,就可以按照下述的指引一步一步安装:其中如果在 apt-key这一步执行一次失败的话,可以多执行两次看看。环境测试安装成功后,openmpi和NCCL都安装成功后,可以用如下的初始化示例测试一下环境的部署情况:# test-init.py from mindspore import contextfrom mindspore.communication.management import init if __name__ == "__main__": context.set_context(mode=context.GRAPH_MODE, device_target="GPU") init("nccl")如果执行的结果如下所示,没有任何的报错信息,则说明环境部署成功:dechin@ubuntu2004:~/projects/mindspore/test$ mindspore test-init.py dechin@ubuntu2004:~/projects/mindspore/test$MindSpore分布式训练首先可能会有人好奇,上一个章节中最后用的mindspore是个啥指令?这其实是我自己在本地配置的一个mindspore-gpu版本的快捷命令:dechin@ubuntu2004:~/projects/$ cat ~/.bashrc | grep mindsporealias mindspore='singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python'如果觉得还算方便的话,读者也可以按照自己的喜好去alias一个快捷命令。接下来我们要看一个实现的案例,这个代码来自于前面的这一篇博客,只是我们在这个代码基础之上,加入了上一个章节中的初始化代码init(),完整代码如下所示:# test_nonlinear.py from mindspore import contextfrom mindspore.communication.management import initcontext.set_context(mode=context.GRAPH_MODE, device_target="GPU")init()import numpy as npfrom mindspore import dataset as dsfrom mindspore import nn, Tensor, Modelimport timefrom mindspore.train.callback import Callback, LossMonitor def get_data(num, a=2.0, b=3.0, c=5.0): for _ in range(num): x = np.random.uniform(-1.0, 1.0) y = np.random.uniform(-1.0, 1.0) noise = np.random.normal(0, 0.03) z = a * x ** 2 + b * y ** 3 + c + noise yield np.array([[x**2], [y**3]],dtype=np.float32).reshape(1,2), np.array([z]).astype(np.float32) def create_dataset(num_data, batch_size=16, repeat_size=1): input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['xy','z']) input_data = input_data.batch(batch_size) input_data = input_data.repeat(repeat_size) return input_data data_number = 160batch_number = 16repeat_number = 200 ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)dict_datasets = next(ds_train.create_dict_iterator()) class LinearNet(nn.Cell): def __init__(self): super(LinearNet, self).__init__() self.fc = nn.Dense(2, 1, 0.02, 0.02) def construct(self, x): x = self.fc(x) return x net = LinearNet()model_params = net.trainable_params()print ('Param Shape is: {}'.format(len(model_params)))for net_param in net.trainable_params(): print(net_param, net_param.asnumpy())net_loss = nn.loss.MSELoss() optim = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.6)model = Model(net, net_loss, optim) epoch = 1model.train(epoch, ds_train, callbacks=[LossMonitor(10)], dataset_sink_mode=False) for net_param in net.trainable_params(): print(net_param, net_param.asnumpy())此时我们需要改成用mpirun去运行这个代码:dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ mpirun -n 2 singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python test_nonlinear.py运行过程中我们就可以看到,有两个python的任务分别跑在两个不同的GPU卡上:这个监控方式其实还是 nvidia-smi的指令,只不过为了长期监视GPU状态,我是使用了 watch -n 1 nvidia-smi的指令,每隔1s的时间就刷新一次 nvidia-smi的状态。但是这里需要注意的也有两点:1. 这个代码直接用mindspore指令也可以跑在单GPU卡上,但是如果要用mpirun来运行,那么我们就不能使用刚才alias的mindspore指令,而需要手动写上完整的指令,除非把新的指令再alias一个;2. 上述的代码因为只是初始化了一下,所以虽然跑在两张卡上,但是实际上训练过程并没有互相通信,是两个独立的任务。那么如果要构造一个完整的自动化的分布式训练,就需要像如下代码一样,再加入context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)这样的一个字样,以及checkpoint中的一些配置,新的完整代码如下所示:# test_nonlinear.py from mindspore import contextfrom mindspore.communication.management import initcontext.set_context(mode=context.GRAPH_MODE, device_target="GPU")init() import numpy as npfrom mindspore import dataset as dsfrom mindspore import nn, Tensor, Modelimport timefrom mindspore.train.callback import Callback, LossMonitor, ModelCheckpoint, CheckpointConfigfrom mindspore.context import ParallelModeimport mindspore as msms.common.set_seed(0) start_time = time.time()def get_data(num, a=2.0, b=3.0, c=5.0): for _ in range(num): x = np.random.uniform(-1.0, 1.0) y = np.random.uniform(-1.0, 1.0) noise = np.random.normal(0, 0.03) z = a * x ** 2 + b * y ** 3 + c + noise yield np.array([[x**2], [y**3]],dtype=np.float32).reshape(1,2), np.array([z]).astype(np.float32) def create_dataset(num_data, batch_size=16, repeat_size=1): input_data = ds.GeneratorDataset(list(get_data(num_data)), column_names=['xy','z']) input_data = input_data.batch(batch_size) input_data = input_data.repeat(repeat_size) return input_data data_number = 160batch_number = 16repeat_number = 20 context.set_auto_parallel_context(parallel_mode=ParallelMode.DATA_PARALLEL)ds_train = create_dataset(data_number, batch_size=batch_number, repeat_size=repeat_number)dict_datasets = next(ds_train.create_dict_iterator()) class LinearNet(nn.Cell): def __init__(self): super(LinearNet, self).__init__() self.fc = nn.Dense(2, 1, 0.02, 0.02) def construct(self, x): x = self.fc(x) return x net = LinearNet()model_params = net.trainable_params()print ('Param Shape is: {}'.format(len(model_params)))for net_param in net.trainable_params(): print(net_param, net_param.asnumpy())net_loss = nn.loss.MSELoss() optim = nn.Momentum(net.trainable_params(), learning_rate=0.01, momentum=0.6)ckpt_config = CheckpointConfig()ckpt_callback = ModelCheckpoint(prefix='data_parallel', config=ckpt_config) model = Model(net, net_loss, optim) epoch = 10model.train(epoch, ds_train, callbacks=[ckpt_callback], dataset_sink_mode=True) for net_param in net.trainable_params(): print(net_param, net_param.asnumpy()) print ('The total time cost is: {}s'.format(time.time() - start_time))这个代码的运行结果如下所示:dechin@ubuntu2004:~/projects/gitlab/dechin/src/mindspore$ mpirun -n 2 singularity exec --nv /home/dechin/tools/singularity/mindspore-gpu_1.2.0.sif python test_nonlinear.py Param Shape is: 2Parameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.02 0.02]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [0.02]Param Shape is: 2Parameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.02 0.02]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [0.02][WARNING] ME(2528801:139843698521024,MainProcess):2021-06-10-09:45:37.603.010 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-1_200.ckpt.[WARNING] ME(2528799:139709496722368,MainProcess):2021-06-10-09:45:37.713.232 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-2_200.ckpt.[WARNING] ME(2528799:139709496722368,MainProcess):2021-06-10-09:45:37.824.271 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-3_200.ckpt.[WARNING] ME(2528799:139709496722368,MainProcess):2021-06-10-09:45:37.943.749 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-4_200.ckpt.[WARNING] ME(2528801:139843698521024,MainProcess):2021-06-10-09:45:38.433.85 [mindspore/train/callback/_checkpoint.py:428] OSError, failed to remove the older ckpt file /home/dechin/projects/gitlab/dechin/src/mindspore/data_parallel-5_200.ckpt.Parameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.12186428 0.21167319]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [5.561276]The total time cost is: 8.412446737289429sParameter (name=fc.weight, shape=(1, 2), dtype=Float32, requires_grad=True) [[0.12186428 0.21167319]]Parameter (name=fc.bias, shape=(1,), dtype=Float32, requires_grad=True) [5.561276]The total time cost is: 8.439369916915894s虽然运行成功了,但是有一点需要注意的是,分布式的这个案例耗时为8.44s,而单卡的训练耗时为8.15s,分布式的训练速度甚至比单卡的要慢,我们在总结里面对这个现象进行一个解释。总结概要这篇文章我们主要探讨如何去部署一个基于MindSpore框架的分布式训练环境,在MindSpore环境已经配置好的情况下,我们只需要安装好openmpi和nccl这两个工具就可以实现分布式的训练,在文中我们已经给出了相应的示例。虽然分布式与并行技术的目的是为了提升性能,但不是说对所有的场景都能够起到加速的作用,比如文章中的案例就没有加速的效果。这其实是因为我们的用例场景太简单了,纵观整个训练过程,GPU的使用率不到10%,在这种情况下还要考虑上通信的开销,自然是没有放在同一个卡上去训练来得快。这也给我们一个启发,考虑使用分布式和并行计算的技术时,一定也要先评估好问题本身是否适用于并行化的处理,否则是达不到预期的加速的目的的。————————————————原文链接:https://blog.csdn.net/baidu_37157624/article/details/117801111
-
华为云人工智能科学家,IEEE Fellow 田奇认为:AI 技术越来越多地进入各个领域,全方位改变了人们的生活样貌,承载着人们对未来城市的想象。但是今天 AI 开发仍处于作坊模式,一个场景需要开发一个模型,模型开发周期长达数月,无法快速适应城市数字化转型过程中越来越多的创新场景。华为云发布的盘古系列大模型,可以实现一个大模型在众多场景中的泛化和规模复制,让 AI 开发由作坊式转变为工业化开发的新模式。让城市智慧应用的快速创新成为了可能。盘古大模型能够支撑城市各行各业、丰富多样的创新、智能应用,是因为有强大的 AI 算法、算力和数据吞吐能力做基础,是城市数字化转型的智能基础设施。据悉,华为云发布的盘古系列超大规模预训练模型,包括 30 亿参数的全球最大视觉(CV)预训练模型之一,以及与循环智能、鹏城实验室联合开发的千亿参数、40TB 训练数据的全球最大中文语言(NLP)预训练模型。后续,华为云还将陆续发布多模态、科学计算等多领域预训练模型。目前,盘古 CV 大模型已经在工业、能源、医学影像、金融、环保等 100 余项实际任务中得到了验证,不仅大幅提升了模型精度,还能平均节约 90% 以上的研发成本。同时,在 ImageNet 1%、10% 数据集上的小样本分类精度上均达到目前业界最高水平(SOTA),ImageNet 上线性分类评估首次达到了和全监督相比拟的结果,累计赢得十余个业界挑战赛冠军。华为云盘古大模型背后依靠的是华为底层软件、训练框架、ModelArts 平台协同优化,充分释放算力,达成全栈性能最优。2020 年,华为云一站式 AI 开发平台 ModelArts 进入领导者象限,连续夺得中国公有云服务机器学习市场份额第一的成绩。这一年 ModelArts 持续进化发布了 3.0 版本,汇聚不断创新的 AI 技术,协同华为云智能体、知识计算等行业 AI 落地方案,走进 600 + 政企客户项目,积极践行普惠 AI 的理念,助力行业智能升级。
-
原文链接:https://bbs.huaweicloud.com/blogs/271147一、什么是逻辑回归? 回归是描述自变量和因变量之间相互依赖关系的统计分析方法。线性回归作为一种常见的回归方法,常用作线性模型(或线性关系)的拟合。 逻辑回归(logistic regression)虽然也称为回归,却不是一种模型拟合方法,而是一种简单的“二分类”算法。具有实现简单,算法高效等诸多优点。 图1.1 二维线性回归 图1.2 三维线性回归1.1 线性回归(linear regression) 图1.1、1.2分别表示二维和三维线性回归模型,图1.1的拟合直接(蓝线)可表示为 y=ax+b,所有数据点(红点)到直线的总欧式距离最短,欧式距离常用作计算目标损失函数,进而求解模型;类似的,图1.2的所有数据点到二维平面的总欧式距离最短。所以线性回归模型通常可以表示为:其中θ表示模型系数。 1.2 逻辑回归(LR) LR是一种简单的有监督机器学习算法,对输入x,逻辑回归模型可以给出 y<0 or y>0 的概率,进而推断出样本为正样本还是负样本。 LR引入sigmoid函数来推断样本为正样本的概率,输入样本 x 为正样本的概率可以表示为:P(y|x) = g(y),其中 g() 为sigmoid函数,曲线图如图1.3所示,输出区间为0~1:图1.3 sigmoid曲线对于已知模型 θ 和样本 x,y=1的概率可以表示为:所以sigmoid尤其适用于二分类问题,当 g(y) > 0.5 时,表示 P(y=1|x) > 0.5,将其判为正样本,对应 y>0 ;反之,当 g(y) < 0.5 时,表示 P(y=1|x) < 0.5,将其判为负样本,对应 y<0。 1.3 LR损失函数 LR采用对数损失函数,对于训练集x∈S,损失函数可以表示为(参考https://zhuanlan.zhihu.com/p/44591359): 梯度下降算法是LR模型的经典解法之一,模型迭代更新的表达式如下:其中l()为目标损失函数,本质为平均对数损失函数。S'为批处理数据集(大小为batchsize),通过批处理方式引入随机扰动,使得模型权重更加快速逼近最优值。α为学习率,直接影响模型的收敛速度,学习率过大会导致loss左右震荡无法达到极值点,学习率太小会导致loss收敛速度过慢,长时间找不到极值点。 二、纵向联邦学习场景下的LR 关于纵向联邦学习的介绍已经屡见不鲜,市面上也涌现出很多优秀的产品,比如FATE、TICS等。纵向联邦可以实现多用户在不暴露己方数据的前提下,共享数据和特征,训练出精度更高的模型,对于金融和政务等众多行业具有重要意义。图2.1 纵向联邦LR2.1 LR的纵向联邦实现 纵向联邦学习的参与方都是抱着共享数据、不暴露己方数据的目的加入到联邦中,所以任何敏感数据都必须经过加密才能出己方信任域(图2.1,参考https://arxiv.org/pdf/1711.10677.pdf),这就引入了同态加密算法。同态加密为密文计算提供了可行性,同时也一定程度上影响了机器学习算法的性能。常见的同态加密库包括seal、paillier等。 纵向联邦场景下梯度计算公式如下:LR的纵向联邦流程如图2.2所示,host表示只有特征的一方,guest表示包含标签的一方。图 2.2 纵向联邦LR算法实现流程在训练开始之前,作业双方需要交换同态公钥。每轮epoch(迭代)的batch(一轮batchsize的计算为一个batch)循环中,包含calEncryptedU-->calEncryptedGradient-->decryptGradient-->updateLrModel四步,guest和host都需要按此顺序执行一遍( 流程图中只体现了guest作为发起方的执行流程)。A2步骤中梯度加随机噪声的目的是为了防止己方U泄露,造成安全问题。 由于同态加密计算只支持整数、浮点数的加法和乘法,所以将1.3中的模型迭代公式中的指数部分表示成泰勒表达式形式:
-
活动结束啦,现公布活动各项结果领奖请联系小助手qq:1841324360发送华为云账号和领奖地址电话领奖时间截止到11月10日,超时未领奖者视为自动放弃裂变奖盖楼奖竞答奖结业证明(已打包发布在本帖附件中,已按照姓氏首字母排序,请同学们自行下载)1、活动时间:即日起-10月20日2、活动规则及奖品1、新用户定义:9月1日后注册华为云账号的用户2、排行榜将不定时更新此帖中,评论区置顶,建议收藏;(提示:网友可直接看到自己邀请的用户总数量,但无法看到邀请的用户哪些是有效的新用户,以及是否属于前50名;有效的邀请用户数及排名将在本帖评论区置顶,频繁更新,请确认自己的领取资格)如有问题,请联系华为云天津小助手。(小助手QQ号:1841324360)3、按邀请新用户人数进行排序发奖,邀请人数相同的,按完成时间先后,先完成先得。4、获奖名单将于大赛结束后统一公布,届时将发布兑奖方式。京东卡只发放卡密。5、邀请奖励发放将在最终名单公布完成后14个工作日内发放完成;6、如因缺货等原因导致奖品缺失,将替换为等价值其他奖品(最终解释权归大赛组委会所有)【大赛交流】大赛交流答疑请务必扫码或者搜索群号码938964886加入QQ群,群里会不定时公布赛事重要信息、获奖名单、培训信息、有奖竞答提醒等内容。
-
参加华为云AppCube训练赛分享学习心得拿大奖本贴盖楼更有好礼相送!>>戳此处立即报名大赛<<学习心得、遇到的困惑对软件行业的想法,包括你想吐槽的统统可以发表在此贴的评论区【竞答奖—心得分享】以下规则针对参与大赛并提交作品同学们必看内容哦~>>戳此处立即报名大赛<<活动时间:即日起——10月20日1、本次训练营分为三个环节:AppCube学习并完成答题、实践大作业、心得分享;2、总分数=客观题*10%+大作业分数*70%+心得分享分数*20%;3、心得分享评分标准:请同学们按照学习经验、产品真实反馈、遇到的问题等这几个维度发表真实的使用感受;4、奖项设置:按总分数排名说明:(1)奖品将在大赛结束后统一发放;(2)如因缺货等原因导致奖品缺失,将替换为等价值其他奖品。心得分享示例模板我的华为云账号:xxx我的分享:XXXXXX【盖楼有奖】参与方式:在本贴当中分享程序员、写代码、秃头、对程序员工作的好奇,统统都可以!楼层为6、16、46、66可获得华为攻城狮行李牌1个;楼层为86、106、136可获得帆布包1个;楼层为166、206、266,可获得华为礼包(帆布包+行李牌+鼠标垫+数据线)!盖楼领奖方式:请关注站内私信,活动于10月20日结束后,将在14个工作日内私信领奖事宜。注意:严禁恶意刷帖,有恶意刷帖者将取消中奖资格!
-
论文 :Embedding Symbolic Knowledge into Deep Networks链接:https://papers.nips.cc/paper/8676-embedding-symbolic-knowledge-into-deep-networks.pdf 论文 提出了模型LENSR,这是一个具有语义正则化的逻辑嵌入网络,它可以通过图卷积网(GCN)将逻辑规则嵌入到d-DNNF(决策确定性否定范式)当中。在这篇文章中,作者专注于命题逻辑(与上述论文中更具表现力的描述逻辑相反),并且表明将AND和OR的两个正则化组件添加到损失函数就足够了,而不用嵌入此类规则。这个框架可以应用在视觉关系预测任务中,当给定一张图片,你需要去预测两个objects之间的正确关系。在这篇文章中,Top-5的准确率直接将原有84.3%的SOTA提升到92.77%。
-
论文 :Logical Expressiveness of Graph Neural Networks链接:https://grlearning.github.io/papers/92.pdf让我们继续来考察图神经网络的逻辑表达。论文 7 中对哪些GNN架构能够捕获哪个逻辑级别进行了大量的研究。目前为止,这个研究还仅限于一阶逻辑的两变量片段FOC_2,因为FOC_2连接到用于检查图同构的Weisfeiler-Lehman(WL)测试上。作者证明,聚合组合神经网络(AC-GNN)的表达方式对应于描述逻辑ALCQ,它是FOC_2的子集。作者还进一步证明,如果我们添加一个独处成分,将GNN转换为聚合组合读出GNN(ACR-GNN),则FOC_2中的每个公式都可以由ACR-GNN分类器捕获。这个工作怎么说呢?简直是不能再棒了!
-
Probabilistic Logic Neural Networks for Reasoning 链接:https://papers.nips.cc/paper/8987-probabilistic-logic-neural-networks-for-reasoning.pdf 论文 提出了 pLogicNet,这个模型是用来做知识图推理的,而且知识图嵌入和逻辑规则相结合。模型通过变差EM算法训练(实际上,这几年用EM做训练&模型优化的论文也有增加的趋势,这事可以之后单独开一篇文章细说)。论文的重点是,用一个马尔科夫逻辑网络定义知识图中的三元组上的联合分布(当然了,这种做法要对未观察到的三元组做一些限制,因为枚举出所有实体和关系上的所有三元组是做不到的),并给逻辑规则设定一个权重;你可以再自己选择一个预训练知识图嵌入(可以选TransE或者ComplEx,实际上随便选一个都行)。在推理步骤中只能怪,模型会根据规则和知识图嵌入找到缺失的三元组,然后在学习步骤中,规则的权重会根据已见到的、已推理的三元组进行更新。pLogicNet 在标准的连接预测测试中展现出了强有力的表现。我很好奇如果你在模型里选用了 GNN 之类的很厉害的知识图嵌入会发生什么。
-
论文:Quaternion Knowledge Graph Embeddings链接:https://papers.nips.cc/paper/8541-quaternion-knowledge-graph-embeddings.pdf 在这次NeurIPS' 19上,这个问题被 Zhang et al. 解决了。他们提出了QuatE,一个四元数KG嵌入模型。什么是四元数?这个需要说清楚。简单来说,复数有一个实部,一个虚部,例如a+ib;而四元数,有三个虚部,例如 a+ib+jc+kd。相比复数会多出两个自由度,且在计算上更为稳定。QuatE将关系建模为4维空间(hypercomplex space)上的旋转,从而将complEx 和 RotatE统一起来。在RotatE中,你有一个旋转平面;而在QuatE中,你会有两个。此外,对称、反对称和逆的功能都保留了下来。与RotatE相比,QuatE在 FB15k-237上训练所需的自由参数减少了 80%。
-
逻辑和知识图嵌入 如果你平时就有关注arXiv或者AI会议论文的话,你肯定已经发现,每年都会有一些越来越复杂的知识图嵌入模型,每次都会把最佳表现的记录刷新那么一点点。那么,知识图的表达能力有没有理论上限呢,或者有没有人研究过模型本身能对哪些建模、对哪些不能建模呢? 论文:Group Representation Theory for Knowledge Graph Embedding链接:https://grlearning.github.io/papers/15.pdf 论文 从群论的角度来研究KG嵌入。结果表明,在复空间中可以对阿贝尔群进行建模,且证明了RotatE(在复空间中进行旋转)可以表示任何有限阿贝尔群。有没有被“群论”、“阿贝尔群”这些数学名词吓到?不过没关系,这篇文章里有对相关的群论知识做简要介绍。不过这个工作在如何将这个工作拓展到1-N或N-N的关系上,还有很大的gap。作者提出一个假设,即或许我们可以用四元数域H来代替复数空间C
-
收敛一致性可能解释不了深度学习中的泛化现象推荐理由:为了探究深度学习泛化能力背后的原理,学术界提出了泛化边界的概念,然后尝试用「收敛一致性」理论推导、设计出了各种各样的泛化边界描述方法,似乎已经取得了不少成果。但这篇论文中作者们通过大量实验发现,虽然其中的许多泛化边界从数值角度看起来挺大,但随着训练数据集大小变大,这些泛化边界也会跟着变大。在此基础上,作者们用过参数化的线性分类器和梯度下降训练的神经网络为例,证明了收敛一致性并不能解释模型的泛化性,即便完全考虑了梯度下降可能带来的隐式偏倚也解释不了。更严谨地说,作者们实验表明,根据收敛一致性得到的泛化边界要比根据梯度下降得到的泛化边界大得多。根据这一系列结果,作者们对「用基于收敛的方法解释泛化能力」的做法提出严重的质疑。虽然这篇论文并没能解决(也没打算解决)深度神经网络中的泛化性问题,但它显然为整个领域指出「此路不通,考虑重来」。这篇论文获得 NeurIPS 2019 杰出新方向论文奖。论文地址:https://papers.nips.cc/paper/9336-uniform-convergence-may-be-unable-to-explain-generalization-in-deep-learning
-
漏洞名称 : Google TensorFlow远程代码执行漏洞 CVE-2021-37678组件名称 : Google TensorFlow影响范围 : Google TensorFlow < 2.6.0漏洞类型 : 远程代码执行利用条件 :1、触发方式:远程2、利用条件:需要用户运行有漏洞的机器学习模型项目综合评价 :<综合评定利用难度>:中等,需要用户运行有漏洞的机器学习模型项目。<综合评定威胁等级>:高危,能造成远程代码执行。漏洞分析:1、组件介绍Google TensorFlow 是美国谷歌(Google Chrome)公司的一套用户机器学习的端到端开源平台。Google TensorFlow 是拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先进机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。2、漏洞描述2021年8月23日,深信服安全团队监测到一则Google TensorFlow组件存在远程代码执行漏洞的信息,漏洞编号:CVE-2021-37678,漏洞威胁等级:高危。该漏洞是由于从yaml格式反序列化 Keras 模型时,未对输入的数据做有效验证,攻击者可利用该漏洞构造恶意数据,造成远程代码执行攻击。影响范围:Google TensorFlow 是著名的机器学习模型,在机器学习领域应用比较广泛。目前受影响的Google TensorFlow版本:Google TensorFlow < 2.6.0解决方案:1、如何检测组件系统版本在 cmd 界面输入:python 在 python 环境中输入 :import tensorflow as ftft.__version__即可得到版本号。2、官方修复建议当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:https://github.com/tensorflow/tensorflow/releases参考链接:1.https://github.com/tensorflow/tensorflow/security/advisories/GHSA-r6jx-9g48-2r5r2.https://github.com/tensorflow/tensorflow/releases
-
自1956年达特茅斯会议首次定义“人工智能”(Artificial Intelligence,AI)开始,AI研究已历经65个春秋。现如今,AI技术已深入到生活的方方面面,无论是图像识别、语音识别、还是虚拟助理,辅助驾驶等等领域,AI技术都扮演了至关重要的角色。不难推测,在未来,AI将在更多场景下,为这个世界带来更多让人赏心悦目的事物。华为云社区博客特发起“百变AI秀”有奖征文活动,以便大家可以更好地学习和使用AI技术。本次活动奖品丰富,HUAWEI 体脂称2Pro、JBL音乐金砖GO 2、摩飞榨汁机、智能床头灯 等你来拿。有点心动?看看下面活动细则吧:我们需要哪些主题的稿件?原则上,我们欢迎所有能帮助所有学习AI技术的人成长的文章!如基于自己的实际使用经验,分享跟AI有关的技术分析、使用感受及在项目实战中的经验或踩坑指南等。只要跟人工智能技术有关的内容,我们都欢迎:你可以从以下几类主题和参考文章中,找到自己感兴趣的投稿方向:1.跟AI技术相关的基础知识,比如深度学习入门可以看什么书籍、OpenCV的一些入门学习代码等AI书籍推荐 12本深度学习书籍推荐:有入门,有深度OpenCV(python)——一键入门–第1篇2.所有跟AI算法有关的内容,比如自组织映射网络SOM聚类算法、PageRank算法等自组织映射网络SOM聚类算法排名算法之PageRank3.自然语言处理(NLP)相关的内容,比如情感分析方法、NLP预训练模型库所用框架NLP专栏丨情感分析方法入门下【AI实战】最强NLP预训练模型库PyTorch-Transformers正式开源!支持6个预训练框架,27个预训练模型4.跟机器学习相关的内容,比如线性回归分析、标准化数据预处理等【机器学习基础】机器学习介绍聊聊机器学习中的那些花儿:标准化、归一化、正则化、离散化和白化大神十年编程经验,200篇详细教程,教你从零到一学Python(万字总结之机器学习篇)5.使用AI库、AI架构、AI平台时的学习与研究过程,比如使用Modelarts平台、使用TensorFlow、OpenCV库时的心得体会ModelArts Notebook快速开源项目实战 — U2Net张小白带你在Windows11 预览版的WSL上玩转MindSpore 1.3.0(GPU版)Tensorflow CIFAR-10图像识别OpenCV萌新福音:易上手的数字识别实践案例6.AI技术应用相关的研究与分析,比如自动驾驶、图像识别方面的应用分析与研究5G与自动驾驶那点事python人工智能-图像识别:tesseract-ocr引擎怎么玩你将获得什么?我们会把收到的优质内容汇编成册,并注明原作者,积累行业口碑,开放给圈内开发者下载查阅,提供实践参考。对于贡献优质内容的作者,我们还将送出各项大礼!同时,在华为云站内外10+个技术社区醒目位置进行推荐,给与百万级流量资源。优质作者更可获得长期约稿和更多内容合作机会。评奖规则说明奖品评选依据 :文章投票数* 40%+专家评审打分*60%投票流程 :截稿后评审会选出15-30篇最优秀的文章到论坛进行投票。投票链接 :9月24日开启投票,更新投票链接。专家评分依据 :文章篇幅、技术含金量、排版美观度、阅读量、点赞、收藏等指标综合评分其他说明 :1、一二三等奖不能叠加。2、征文投稿数量不计入月度激励活动文章数量。3、创作小能手奖发文数如果出现并列情况,较早发文者得奖在哪里投稿?文章需要发表在社区博客; 是时候展现真正的技术了, 点击前往发布标题以 【百变AI秀】结尾,例如:一文搞懂机器学习十大算法丨【百变AI秀】。文章末尾需加上活动名称及链接地址:【百变AI秀】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/296704有哪些需要注意的1、文章内容需体现技术看点,图文并茂,建议字数在500字以上;2、文章要求为投稿人原创,凡转载或抄袭一经发现将取消参赛资格;3、文章须在华为云社区为首发,如华为云平台已有文章内容则视为稿件无效;4、稿件投稿后,华为云拥有该稿件的使用权、修改权等。快来华为云社区博客,一起秀起来吧!点击立即发布如果有任何问题,可扫描下方二维码咨询。添加微信时请备注:百变AI秀 + 报名活动时使用的华为云昵称!扫码添加小助手:
-
在许多情况下,神经网络在独立同分布的测试集上进行评估已经达到了人类表现。因此,我们自然要怀疑这些模型在这些任务上是否获得了真正的人类层次的理解。为了探索网络对底层任务的理解层次,我们可以探索这个模型错误分类的例子。 Szegedy et al. (2014b) 发现,在精度达到人类水平的神经网络上通过优化过程故意构造数据点,其上的误差率接近100%,模型在这个输入点 x′ 的输出与附近的数据点 x 非常不同。在许多情况下,x′ 与 x 非常近似,人类观察者不会察觉原始样本和对抗样本(adversarial example)之间的差异,但是网络会作出非常不同的预测。对抗样本在很多领域有很多影响,例如计算机安全,这超出了本章的范围。然而,它们在正则化的背景下很有意思,因为我们可以通过对抗训练(adversarial training)减少原有独立同分布的测试集的错误率——在对抗扰动的训练集样本上训练网络 (Szegedy et al., 2014b; Goodfellow et al., 2014b)。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第三期2026/08/21 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;念擎-华为云AI开发者运营案例开发专家
本期直播内容:AI六层能力首次详细解读 + 新一代华为云开发者空间亮相 + 校园案例直播带练
回顾中
热门标签