Quantcast
Thinking machines have been around since 1948, when the Manchester Small-Scale Experimental Machine, nicknamed the Baby, was the first to execute a program stored in its memory.

Nearly seventy years later, computers now speak freely to us, take our commands, field our questions, deliver mail in the office, greet customers in stores, cook pancakes, produce creative works, win strategy-based games, provide companionship in hospital wards, assist in the operating room  and on the factory floor, fight wars, drive cars, and are increasingly a fixture in our homes and workplaces.
A computer’s brain is empty, however, until it’s fed the information and algorithms it needs in order to process what it learns and deliver results.

An algorithm is a step-by-step set of instructions, as in a recipe. One way to teach a computer is to feed into it huge quantities of information and rules about the world so that it can call upon an encyclopedic store of know-how, coupled with algorithms that instruct it what to do with all that information when tasked with a given challenge. This is the “big data” approach and it’s had its successes.
The concept is to use a large number of training examples from which the computer can infer the rules for recognizing a box when it sees one – whether the box is expertly or sloppily drawn, or even just inferred from a few dashed-off lines.  Increasing the number of training examples increases the computer’s accuracy.


The big idea here is that the computer works with a map of artificial neural networks (ANNs) that are inspired by our biological neural networks. Just as biological networks are interconnected, the artificial ones likewise exchange information between the layers.
The first layer learns primitive features, like how to discern the edge of the image, such as the straight edge of the box, or the tiniest unit of speech, as in the sound of the individual letter “b.” It does this by finding combinations of digitized pixels (for image recognition) or sound waves (for speech recognition) that occur more often than they would by chance.  

Once that layer accurately detects these features, they’re fed to the next layer, which trains itself through a large input of examples to recognize more complex features, like the corner of the box, or a combination of speech sounds, such as “b-o-x.”  

The process is repeated in successive layers until the system can reliably recognize the object or sound it is attempting to identify. Further, the computer can train itself on known data and apply what it knows to new data.
Denise Shekerjian is a writer and lawyer with a keen interest in creativity and artificial intelligence. You can find her at soulofaword.com.
* Lazy Load - jQuery plugin for lazy loading images * * Copyright (c) 2007-2015 Mika Tuupola * * Licensed under the MIT license: * http://www.opensource.org/licenses/mit-license.php * * Project home: * http://www.appelsiini.net/projects/lazyload * * Version: 1.9.7 * */ (function($, window, document, undefined) { var $window = $(window); $.fn.lazyload = function(options) { var elements = this; var $container; var settings = { threshold : 0, failure_limit : 0, event : "scroll", effect : "show", container : window, data_attribute : "original", skip_invisible : false, appear : null, load : null, placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" }; function update() { var counter = 0; elements.each(function() { var $this = $(this); if (settings.skip_invisible && !$this.is(":visible")) { return; } if ($.abovethetop(this, settings) || $.leftofbegin(this, settings)) { /* Nothing. */ } else if (!$.belowthefold(this, settings) && !$.rightoffold(this, settings)) { $this.trigger("appear"); /* if we found an image we'll load, reset the counter */ counter = 0; } else { if (++counter > settings.failure_limit) { return false; } } }); } if(options) { /* Maintain BC for a couple of versions. */ if (undefined !== options.failurelimit) { options.failure_limit = options.failurelimit; delete options.failurelimit; } if (undefined !== options.effectspeed) { options.effect_speed = options.effectspeed; delete options.effectspeed; } $.extend(settings, options); } /* Cache container as jQuery as object. */ $container = (settings.container === undefined || settings.container === window) ? $window : $(settings.container); /* Fire one scroll event per scroll. Not one scroll event per image. */ if (0 === settings.event.indexOf("scroll")) { $container.bind(settings.event, function() { return update(); }); } this.each(function() { var self = this; var $self = $(self); self.loaded = false; /* If no src attribute given use data:uri. */ if ($self.attr("src") === undefined || $self.attr("src") === false) { if ($self.is("img")) { $self.attr("src", settings.placeholder); } } /* When appear is triggered load original image. */ $self.one("appear", function() { if (!this.loaded) { if (settings.appear) { var elements_left = elements.length; settings.appear.call(self, elements_left, settings); } $(" ") .bind("load", function() { var original = $self.attr("data-" + settings.data_attribute); $self.hide(); if ($self.is("img")) { $self.attr("src", original); } else { $self.css("background-image", "url('" + original + "')"); } $self[settings.effect](settings.effect_speed); self.loaded = true; /* Remove image from array so it is not looped next time. */ var temp = $.grep(elements, function(element) { return !element.loaded; }); elements = $(temp); if (settings.load) { var elements_left = elements.length; settings.load.call(self, elements_left, settings); } }) .attr("src", $self.attr("data-" + settings.data_attribute)); } }); /* When wanted event is triggered load original image */ /* by triggering appear. */ if (0 !== settings.event.indexOf("scroll")) { $self.bind(settings.event, function() { if (!self.loaded) { $self.trigger("appear"); } }); } }); /* Check if something appears when window is resized. */ $window.bind("resize", function() { update(); }); /* With IOS5 force loading images when navigating with back button. */ /* Non optimal workaround. */ if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) { $window.bind("pageshow", function(event) { if (event.originalEvent && event.originalEvent.persisted) { elements.each(function() { $(this).trigger("appear"); }); } }); } /* Force initial check if images should appear. */ $(document).ready(function() { update(); }); return this; }; /* Convenience methods in jQuery namespace. */ /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ $.belowthefold = function(element, settings) { var fold; if (settings.container === undefined || settings.container === window) { fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop(); } else { fold = $(settings.container).offset().top + $(settings.container).height(); } return fold <=$ (element).offset().top - settings.threshold; }; $.rightoffold=f unction(element, settings) { var fold; if (settings.container===u ndefined || settings.container===w indow) { fold=$ window.width() + $window.scrollLeft(); } else { fold=$ (settings.container).offset().left + $(settings.container).width(); } return fold <=$ (element).offset().left - settings.threshold; }; $.abovethetop=f unction(element, settings) { var fold; if (settings.container===u ndefined || settings.container===w indow) { fold=$ window.scrollTop(); } else { fold=$ (settings.container).offset().top; } return fold>= $(element).offset().top + settings.threshold + $(element).height(); }; $.leftofbegin = function(element, settings) { var fold; if (settings.container === undefined || settings.container === window) { fold = $window.scrollLeft(); } else { fold = $(settings.container).offset().left; } return fold >= $(element).offset().left + settings.threshold + $(element).width(); }; $.inviewport = function(element, settings) { return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && !$.belowthefold(element, settings) && !$.abovethetop(element, settings); }; /* Custom selectors for your convenience. */ /* Use as $("img:below-the-fold").something() or */ /* $("img").filter(":below-the-fold").something() which is faster */ $.extend($.expr[":"], { "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, /* Maintain BC for couple of versions. */ "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } }); })(jQuery, window, document);