忘掉算法,人工智能的未来还要看硬件突破!

 

      关于人工智能的炒作都是关于算法的。在机器学习领域处于领先地位的谷歌公司Deep Mind最近发表了一篇文章,其中描述了AlphaGo Zero如何从零开始成为一个围棋大师,其利用强化学习算法的先进技术,击败了之前的所有版本。然而,尽管企业和组织为引进算法设计和数据科学领域的顶尖人才而相互竞争,但真正的新闻并不是来自于比特世界,而是来自于电线、硅和电子行业:硬件又回来了!

1摩尔定律的扁平化

  首先,一个快速的历史旅程:1958年,第一个集成电路包含了2个晶体管,体积相当大,覆盖一平方厘米。到1971年,“摩尔定律”在集成芯片性能的指数级增长中变得明显;2300个晶体管在同一表面上,与以前一样。到2014年,IBM P8处理器拥有多达42亿个晶体管和16个核心,所有这些覆盖在650平方毫米。在给定的硅片上,你能装多少个晶体管是有一个自然的限制的,而且我们很快就会达到这个极限。

  此外,机器学习应用,尤其是在模式识别(如理解语音、图像等方面)需要大量的并行处理。当谷歌宣布其算法能够识别猫的图像时,他们没有提到的是,它的软件需要16000个处理器才能运行。如果你可以在云计算的服务器上运行你的算法,这不是什么大问题,但如果你必须在一个移动设备上运行这些算法呢?这正日益成为一个重要的行业需求。在终端上运行先进的机器学习算法给用户带来了巨大的优势,同时也解决了许多数据隐私问题。想象一下,如果Siri不需要做云计算,就能够处理智能手机硬件上的所有数据和算法。但是,如果你发现智能手机在几分钟通话或玩 Minecraft后变得太热,你就等着用手机来让Siri变得真正个性化。


2解决瓶颈问题

  设备变热的原因,以及我们当前计算机硬件设计的主要问题,是所谓的“冯诺依曼瓶颈”:经典的计算机架构将数据处理与数据存储分离开来,这意味着数据需要在计算过程中从一个地方转移到另一个地方。并行度通过分解计算和分布处理来解决部分问题,但你仍然需要在最后移动数据,将所有的数据都转换成期望的输出。那么,如果有一种方法可以完全消除硬件瓶颈呢?如果处理和数据在同一个地方,无需移动,也不会产生热量或消耗那么多的能量,那会怎样呢?毕竟,我们的大脑就是这样工作的:我们没有像计算机那样处理数据和存储数据的独立区域,所有的事情都发生在我们的神经元上。

英特尔神经形态芯片Loihi

  我们的大脑功能在人工智能研究中并不新鲜,我们已经在利用神经网络进行深度学习了。我们通过机器学习算法和并行处理来模拟神经元的功能。但是,如果我们的计算机不像我们的大脑那样运行,那该怎么办呢?自20世纪70年代以来,人们就已经设想出这样一种方式:将大脑功能映射到硬件上,换句话说,就是用硬件直接“绘制”大脑的结构。这种方法被称为“神经形态计算”,目前终于开始走向商业化。英特尔和高通等公司最近宣布,其将推出用于商业用途的神经形态芯片(neuromorphic chips)。

  神经形态芯片可以用于AI应用的终端,这的确是一个非常令人兴奋的消息。不过,它们也有可能将机器智能提升到一个全新的水平。通过使用电子硬件而不是软件来发展机器认知,我们或许能够实现通用人工智能的梦想,并创造出真正的智能系统。

3量子:计算大爆炸

  但是,计算真正的大爆炸并非来自于神经形态芯片(尽管有巨大的潜力,最终可能只会有小众应用),而是来自于量子物理学的应用。随着对快速计算的需求增加,我们解决真正困难问题的雄心也在增加。如果我们能计算出排列一系列分子的最佳方式来开发治疗癌症的方法呢?这个问题实际上是针对减少所有癌症的研究,目前是由试错法进行的。经典计算无法解决这样的问题:在经过几次迭代之后,参数的组合就会爆炸。量子计算有可能同时计算所有可能的组合,并在几秒钟内得出正确答案。有许多类似的优化问题可以用量子计算解决。比如在复杂的业务中优化资源配置,或者在经济中做出能够支持最佳策略的预测,或者在密码学中分解数字。

IBM的量子计算机

  量子计算机正在快速发展:我们现在处于50量子位的水平。让我们把这个数字写进预先考虑的范围。一台32位的量子计算机可以处理40亿个系数和265 GB的信息——你可能会说,这并不令人印象深刻,因为你可以在几秒钟内在一台笔记本电脑上运行类似的程序。但一旦我们达到了64位的量子计算机极限,故事就会发生巨大的变化。这样的计算机可以同时计算出互联网上所有的信息,即74“艾字节”(十亿GB)——这将需要数年时间才能在当前的超级计算机上完成。我们已经非常接近了!然而,一旦我们开发出了256位量子计算机,真正的游戏规则将会改变。这样的计算机将能够计算出宇宙中所有原子的数量,量子计算是宇宙计算,它对人类文明的影响可能是巨大而深远的。


ML & AI    一个有用的公众号

长按,识别二维码,加关注

获取更多干货!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个示例代码,它使用了 HttpServletRequest 对象来读取 HTTP 头部信息,并使用正则表达式来判断设备类型: ```java import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; public class DeviceUtils { private static final String[] mobileUserAgent = { "iphone", "android", "phone", "mobile", "wap", "netfront", "java", "opera mobi", "opera mini", "ucweb", "windows ce", "symbian", "series", "webos", "sony", "blackberry", "dopod", "nokia", "samsung", "palmsource", "xda", "pieplus", "meizu", "midp", "cldc", "motorola", "foma", "docomo", "up.browser", "up.link", "blazer", "helio", "hosin", "huawei", "novarra", "coolpad", "webos", "techfaith", "palmsource", "alcatel", "amoi", "ktouch", "nexian", "ericsson", "philips", "sagem", "wellcom", "bunjalloo", "maui", "smartphone", "iemobile", "spice", "bird", "zte-", "longcos", "pantech", "gionee", "portalmmm", "jig browser", "hiptop", "benq", "haier", "^lct", "320x320", "240x320", "176x220" }; private static final String[] pcHeaders = { "Windows 98", "Windows ME", "Windows 2000", "Windows XP", "Windows NT", "Ubuntu" }; private static final String[] mobileHeaders = { "iPad", "iPhone", "Android", "Pocket", "Sony", "BlackBerry", "WebOS", "HP iPAQ", "Smartphone", "IEMobile", "Windows Phone", "Acer Iconia Tab A500", "Asus Eee Pad Transformer TF101", "Samsung Galaxy Tab", "HTC Flyer" }; private static final String[] botHeaders = { "Googlebot", "Baiduspider", "Yahoo!", "Yahoo Slurp", "DoCoMo", "Sosospider", "Sogou spider", "ia_archiver", "Twiceler" }; public static DeviceType getDeviceType(HttpServletRequest request) { DeviceType deviceType = DeviceType.UNKNOWN; String userAgent = request.getHeader("User-Agent"); if (userAgent != null) { userAgent = userAgent.toLowerCase(); // 匹配 if (Pattern.compile(".*(" + String.join("|", mobileUserAgent) + ").*").matcher(userAgent).matches()) { deviceType = DeviceType.MOBILE; } else if (Pattern.compile(".*(" + String.join("| ### 回答2: 要根据HTTP头部信息判断设备类型,可以使用Java的Servlet来实现。以下是一个示例代码: ``` import javax.servlet.http.HttpServletRequest; public class DeviceTypeChecker { public static DeviceType getDeviceType(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); if (userAgent != null && !userAgent.isEmpty()) { if (userAgent.toLowerCase().contains("mobile")) { return DeviceType.MOBILE; } else if (userAgent.toLowerCase().contains("tablet")) { return DeviceType.TABLET; } else if (userAgent.toLowerCase().contains("tv")) { return DeviceType.TV; } } return DeviceType.DESKTOP; } public enum DeviceType { DESKTOP, MOBILE, TABLET, TV } } ``` 以上代码中,我们通过HttpServletRequest的getHeader方法获取HTTP请求的User-Agent头部信息。然后根据包含的关键字判断设备类型,如果包含"mobile"则返回MOBILE,如果包含"tablet"则返回TABLET,如果包含"tv"则返回TV,否则返回DESKTOP。 在使用时,可以在Servlet中使用如下方式获取设备类型: ``` import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { // 获取设备类型 DeviceTypeChecker.DeviceType deviceType = DeviceTypeChecker.getDeviceType(request); // 根据设备类型做相应处理 if (deviceType == DeviceTypeChecker.DeviceType.MOBILE) { // 手机设备处理逻辑 } else if (deviceType == DeviceTypeChecker.DeviceType.TABLET) { // 平板设备处理逻辑 } else if (deviceType == DeviceTypeChecker.DeviceType.TV) { // 电视设备处理逻辑 } else { // 桌面设备处理逻辑 } // 返回响应 PrintWriter writer = response.getWriter(); writer.println("Device Type: " + deviceType); writer.close(); } } ``` 以上示例中,我们通过调用DeviceTypeChecker.getDeviceType(request)方法获取设备类型,然后根据不同设备类型做相应处理。在返回响应时,我们将设备类型输出到客户端。 ### 回答3: 要根据HTTP头部信息判断设备类型,可以使用Java语言编写以下代码: ```java import javax.servlet.http.HttpServletRequest; public class DeviceTypeChecker { public String getDeviceType(HttpServletRequest request) { String userAgent = request.getHeader("User-Agent"); String deviceType = "Unknown"; if(userAgent.contains("Android")) { deviceType = "Android"; } else if(userAgent.contains("iPhone") || userAgent.contains("iPad")) { deviceType = "iOS"; } else if(userAgent.contains("Windows Phone")) { deviceType = "Windows Phone"; } return deviceType; } } ``` 以上代码通过传入HttpServletRequest对象获取HTTP头部信息中的User-Agent字段,并根据其包含的关键词判断设备类型。如果User-Agent中包含"Android"关键词,则设备类型为Android;如果包含"iPhone"或"iPad"关键词,则设备类型为iOS;如果包含"Windows Phone"关键词,则设备类型为Windows Phone。如果User-Agent中不包含任何关键词,则设备类型为Unknown。 使用该代码时,可以通过以下方式调用: ```java HttpServletRequest request = // 获取请求对象的代码 DeviceTypeChecker deviceTypeChecker = new DeviceTypeChecker(); String deviceType = deviceTypeChecker.getDeviceType(request); System.out.println("设备类型:" + deviceType); ``` 请注意,由于不同设备的User-Agent格式可能不同,以上代码只是简单判断了一些常见的关键词,并不能完全覆盖所有设备类型。如果需要更准确地判断设备类型,可以根据具体需求进行适当的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值