<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.tedyun.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tedyun</id>
	<title>TedYunWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tedyun.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tedyun"/>
	<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php/Special:Contributions/Tedyun"/>
	<updated>2026-04-25T16:30:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.10</generator>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Git_Tips&amp;diff=519</id>
		<title>Git Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Git_Tips&amp;diff=519"/>
		<updated>2017-11-14T22:12:51Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cheatsheet ==&lt;br /&gt;
&lt;br /&gt;
See state of commits of your local branch vs repository&lt;br /&gt;
 git status&lt;br /&gt;
&lt;br /&gt;
You are working on a new feature - newfeat&lt;br /&gt;
&lt;br /&gt;
1) create a new branch, newfeat&lt;br /&gt;
&lt;br /&gt;
 git checkout -b newfeat master&lt;br /&gt;
&lt;br /&gt;
2) make changes, etc in your branch&lt;br /&gt;
&lt;br /&gt;
3) push feature branch into repository&lt;br /&gt;
&lt;br /&gt;
 git push -u origin newfeat&lt;br /&gt;
&lt;br /&gt;
4) merge back into master&lt;br /&gt;
&lt;br /&gt;
 git checkout master&lt;br /&gt;
 git merge --no-ff newfeat&lt;br /&gt;
 git branch -d newfeat&lt;br /&gt;
 git push origin master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If master changes and you want to incorporate master changes into your branch:&lt;br /&gt;
 git rebase master&lt;br /&gt;
or&lt;br /&gt;
 git merge master&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Delete branch&lt;br /&gt;
local:&lt;br /&gt;
 git branch -d old_branch&lt;br /&gt;
remote:&lt;br /&gt;
 git push origin :old_branch&lt;br /&gt;
&lt;br /&gt;
Undo last commit,&lt;br /&gt;
&lt;br /&gt;
1) reset files to before you committed&lt;br /&gt;
 git reset --hard HEAD~1&lt;br /&gt;
2) just undo the &amp;quot;commit&amp;quot; action but leave everything else as is&lt;br /&gt;
 git reset --hard HEAD~1&lt;br /&gt;
&lt;br /&gt;
To see the list of remote branches:&lt;br /&gt;
 git branch -a&lt;br /&gt;
or&lt;br /&gt;
 git branch -r&lt;br /&gt;
&lt;br /&gt;
To update the list of remote branches:&lt;br /&gt;
 git remote update origin --prune&lt;br /&gt;
or&lt;br /&gt;
 git remote prune origin&lt;br /&gt;
&lt;br /&gt;
To see diff between the current and the last version&lt;br /&gt;
 git diff HEAD^ HEAD&lt;br /&gt;
&lt;br /&gt;
To see the list of contributors and the number of commits made by each pereson&lt;br /&gt;
 git shortlog -s -n&lt;br /&gt;
&lt;br /&gt;
To clear the working directory, the following command will remove untracked files, including directories (-d). Replace the -f argument with -n to perform a dry-run or -i for interactive mode and it will tell you what will be removed. Add (-x) to remove files ignored by git.&lt;br /&gt;
 git clean -d -f&lt;br /&gt;
&lt;br /&gt;
To disable vi dialog during merge, add &amp;quot;export GIT_MERGE_AUTOEDIT=no&amp;quot; to .bashrc in home directory. In older versions:&lt;br /&gt;
 git config --global core.mergeoptions --no-edit&lt;br /&gt;
&lt;br /&gt;
To speed up git&amp;#039;s autocomplete on Windows https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow&lt;br /&gt;
 git config --global core.fscache true&lt;br /&gt;
&lt;br /&gt;
Cleanup unnecessary files and optimize the local repository&lt;br /&gt;
 git gc&lt;br /&gt;
&lt;br /&gt;
Store credentials for 24 hours when using https&lt;br /&gt;
 git config credential.helper &amp;#039;cache --timeout=86400&amp;#039;&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=518</id>
		<title>New desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=518"/>
		<updated>2017-10-22T20:36:23Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: Intel i7 2600 3.4GHz - \$265&lt;br /&gt;
* Motherboard: Asus P8P67 - \$170&lt;br /&gt;
* Memory: Kingston HyperX Blu DDR3 1600 8GB - \$40 ✔&lt;br /&gt;
* Graphic: Sapphire Radeon 6870 - \$160 ✔&lt;br /&gt;
* Sound: on board&lt;br /&gt;
* Network: dual on board&lt;br /&gt;
* HDD1: OCZ Vertex 2 3.5&amp;quot; SSD 90GB - \$135 ✔&lt;br /&gt;
* HDD2: Samsung Spinpoint F3 HD103SJ 1TB 7200RPM - \$55 ✔&lt;br /&gt;
* ODD: Samsung BD-ROM B123L - \$59 ✔&lt;br /&gt;
* Power Supply: Corsair 650TX - \$59 ✔&lt;br /&gt;
* CPU Cooler: Cooler Master Hyper 212 Plus - \$25.5&lt;br /&gt;
* Case: Cooler Master HAF 922 - \$89 ✔&lt;br /&gt;
* Keyboard: Logitech K320 Wireless Keyboard with Universal Receiver - \$20 ✔&lt;br /&gt;
* Mouse: Logitech M505 Wireless Mouse with Universal Receiver - ✔&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=517</id>
		<title>New desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=517"/>
		<updated>2017-10-22T20:35:03Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: Intel i7 2600 3.4GHz - \$265&lt;br /&gt;
* Motherboard: Asus P8P67 - \$170&lt;br /&gt;
* Memory: Kingston HyperX Blu DDR3 1600 8GB - \$40 ✔&lt;br /&gt;
* Graphic: Sapphire Radeon 6870 - \$160 ✔&lt;br /&gt;
* Sound: on board&lt;br /&gt;
* Network: dual on board&lt;br /&gt;
* HDD1: OCZ Vertex 2 3.5&amp;quot; SSD 90GB - \$135 ✔&lt;br /&gt;
* HDD2: Samsung Spinpoint F3 HD103SJ 1TB 7200RPM - \$55 ✔&lt;br /&gt;
* ODD: Samsung BD-ROM B123L - \$59 ✔&lt;br /&gt;
* Power Supply: Corsair 650TX - \$59 ✔&lt;br /&gt;
* CPU Cooler: Cooler Master Hyper 212 Plus - \$25.5&lt;br /&gt;
* Case: Cooler Master HAF 922 - \$89 ✔&lt;br /&gt;
* Keyboard: Logitech K320 Wireless Keyboard with Universal Receiver - \$20 ✔&lt;br /&gt;
* Mouse: Logitech M505 Wireless Mouse with Universal Receiver - $1$✔&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=516</id>
		<title>New desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=516"/>
		<updated>2017-10-22T20:34:00Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: Intel i7 2600 3.4GHz - \$265&lt;br /&gt;
* Motherboard: Asus P8P67 - \$170&lt;br /&gt;
* Memory: Kingston HyperX Blu DDR3 1600 8GB - \$40 ✔&lt;br /&gt;
* Graphic: Sapphire Radeon 6870 - \$160 ✔&lt;br /&gt;
* Sound: on board&lt;br /&gt;
* Network: dual on board&lt;br /&gt;
* HDD1: OCZ Vertex 2 3.5&amp;quot; SSD 90GB - \$135 ✔&lt;br /&gt;
* HDD2: Samsung Spinpoint F3 HD103SJ 1TB 7200RPM - \$55 ✔&lt;br /&gt;
* ODD: Samsung BD-ROM B123L - \$59 ✔&lt;br /&gt;
* Power Supply: Corsair 650TX - \$59 ✔&lt;br /&gt;
* CPU Cooler: Cooler Master Hyper 212 Plus - \$25.5&lt;br /&gt;
* Case: Cooler Master HAF 922 - \$89 ✔&lt;br /&gt;
* Keyboard: Logitech K320 Wireless Keyboard with Universal Receiver - \$20 ✔&lt;br /&gt;
* Mouse: Logitech M505 Wireless Mouse with Universal Receiver - ✔&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=515</id>
		<title>New desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=New_desktop&amp;diff=515"/>
		<updated>2017-10-22T20:33:17Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: Intel i7 2600 3.4GHz - \$265&lt;br /&gt;
* Motherboard: Asus P8P67 - $\$170$&lt;br /&gt;
* Memory: Kingston HyperX Blu DDR3 1600 8GB - $\$40$ ✔&lt;br /&gt;
* Graphic: Sapphire Radeon 6870 - $\$160$ ✔&lt;br /&gt;
* Sound: on board&lt;br /&gt;
* Network: dual on board&lt;br /&gt;
* HDD1: OCZ Vertex 2 3.5&amp;quot; SSD 90GB - $\$135$ ✔&lt;br /&gt;
* HDD2: Samsung Spinpoint F3 HD103SJ 1TB 7200RPM - $\$55$ ✔&lt;br /&gt;
* ODD: Samsung BD-ROM B123L - $\$59$ ✔&lt;br /&gt;
* Power Supply: Corsair 650TX - $\$59$ ✔&lt;br /&gt;
* CPU Cooler: Cooler Master Hyper 212 Plus - $\$25.5$&lt;br /&gt;
* Case: Cooler Master HAF 922 - $\$89$ ✔&lt;br /&gt;
* Keyboard: Logitech K320 Wireless Keyboard with Universal Receiver - $\$20$ ✔&lt;br /&gt;
* Mouse: Logitech M505 Wireless Mouse with Universal Receiver - ✔&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=514</id>
		<title>Desktop Build 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=514"/>
		<updated>2017-09-01T20:07:41Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4 (350)&lt;br /&gt;
* Motherboard: ASUS PRIME X370-PRO AM4 ATX AMD Motherboard (110)&lt;br /&gt;
* Memory:&lt;br /&gt;
* Cooler: Cooler Master Hyper 212 EVO + Cooler Master AMD AM4 CPU Cooler Upgrade kit (25)&lt;br /&gt;
* Power: X&lt;br /&gt;
* Case: X&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=513</id>
		<title>Desktop Build 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=513"/>
		<updated>2017-09-01T20:07:24Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4 ($350)&lt;br /&gt;
* Motherboard: ASUS PRIME X370-PRO AM4 ATX AMD Motherboard ($110)&lt;br /&gt;
* Memory:&lt;br /&gt;
* Cooler: Cooler Master Hyper 212 EVO + Cooler Master AMD AM4 CPU Cooler Upgrade kit ($25)&lt;br /&gt;
* Power: X&lt;br /&gt;
* Case: X&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=512</id>
		<title>Desktop Build 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=512"/>
		<updated>2017-08-30T22:53:29Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4&lt;br /&gt;
* Motherboard: ASUS PRIME X370-PRO AM4 ATX AMD Motherboard&lt;br /&gt;
* Memory:&lt;br /&gt;
* Cooler: Cooler Master Hyper 212 EVO + Cooler Master AMD AM4 CPU Cooler Upgrade kit&lt;br /&gt;
* Power(?):&lt;br /&gt;
* Case(?):&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=511</id>
		<title>Desktop Build 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=511"/>
		<updated>2017-08-30T22:44:08Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4&lt;br /&gt;
* Motherboard: ASUS PRIME X370-PRO AM4 ATX AMD Motherboard&lt;br /&gt;
* Memory:&lt;br /&gt;
* Cooler: Cooler Master Hyper 212 EVO&lt;br /&gt;
* Power(?):&lt;br /&gt;
* Case(?):&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=510</id>
		<title>Desktop Build 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=510"/>
		<updated>2017-08-30T22:42:20Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* CPU: AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4&lt;br /&gt;
* Motherboard: ASUS PRIME X370-PRO AM4 ATX AMD Motherboard&lt;br /&gt;
* Memory:&lt;br /&gt;
* Cooler:&lt;br /&gt;
* Power(?):&lt;br /&gt;
* Case(?):&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=509</id>
		<title>Desktop Build 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Desktop_Build_2017&amp;diff=509"/>
		<updated>2017-08-30T22:14:34Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: Created page with &amp;quot;* AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4 * ASUS PRIME X370-PRO AM4 ATX AMD Motherboard&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* AMD Ryzen 7 1800X 3.6 GHz 8 Core AM4&lt;br /&gt;
* ASUS PRIME X370-PRO AM4 ATX AMD Motherboard&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=508</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=508"/>
		<updated>2017-08-30T22:13:29Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Others */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Joy&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Make Difference&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# [[Bitcoin and Cryptocurrency Technologies]]&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[Desktop Build 2017]]&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Bitcoin_and_Cryptocurrency_Technologies&amp;diff=507</id>
		<title>Bitcoin and Cryptocurrency Technologies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Bitcoin_and_Cryptocurrency_Technologies&amp;diff=507"/>
		<updated>2017-07-22T21:33:27Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Cryptographic Hash Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://www.coursera.org/learn/cryptocurrency&lt;br /&gt;
&lt;br /&gt;
== Cryptographic Hash Functions ==&lt;br /&gt;
&lt;br /&gt;
=== Hash Function ===&lt;br /&gt;
&lt;br /&gt;
* Takes any string as input&lt;br /&gt;
* Fixed-size output (we&amp;#039;ll use 256 bits)&lt;br /&gt;
* efficiently computable&lt;br /&gt;
&lt;br /&gt;
Security properties:&lt;br /&gt;
&lt;br /&gt;
* Collision-free&lt;br /&gt;
* Hiding&lt;br /&gt;
* Puzzle-friendly&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Bitcoin_and_Cryptocurrency_Technologies&amp;diff=506</id>
		<title>Bitcoin and Cryptocurrency Technologies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Bitcoin_and_Cryptocurrency_Technologies&amp;diff=506"/>
		<updated>2017-07-22T21:33:06Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Cryptographic Hash Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://www.coursera.org/learn/cryptocurrency&lt;br /&gt;
&lt;br /&gt;
== Cryptographic Hash Functions ==&lt;br /&gt;
&lt;br /&gt;
=== Hash Function ===&lt;br /&gt;
&lt;br /&gt;
- Takes any string as input&lt;br /&gt;
- Fixed-size output (we&amp;#039;ll use 256 bits)&lt;br /&gt;
- efficiently computable&lt;br /&gt;
&lt;br /&gt;
Security properties:&lt;br /&gt;
&lt;br /&gt;
- Collision-free&lt;br /&gt;
- Hiding&lt;br /&gt;
- Puzzle-friendly&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Bitcoin_and_Cryptocurrency_Technologies&amp;diff=505</id>
		<title>Bitcoin and Cryptocurrency Technologies</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Bitcoin_and_Cryptocurrency_Technologies&amp;diff=505"/>
		<updated>2017-07-22T21:19:00Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: Created page with &amp;quot;https://www.coursera.org/learn/cryptocurrency  == Cryptographic Hash Functions ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://www.coursera.org/learn/cryptocurrency&lt;br /&gt;
&lt;br /&gt;
== Cryptographic Hash Functions ==&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=504</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=504"/>
		<updated>2017-07-22T21:08:17Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Joy&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Make Difference&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# [[Bitcoin and Cryptocurrency Technologies]]&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=503</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=503"/>
		<updated>2017-07-15T20:11:12Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Joy&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Make Difference&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=502</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=502"/>
		<updated>2017-07-15T20:09:45Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Wealth&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=501</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=501"/>
		<updated>2017-07-15T20:08:53Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Wealth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=500</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=500"/>
		<updated>2017-07-15T20:08:14Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|.&lt;br /&gt;
|.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Wealth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=499</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=499"/>
		<updated>2017-07-15T20:07:41Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Family&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Wealth&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Health&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=498</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=498"/>
		<updated>2017-07-15T20:03:36Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life!!Long Term!!Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Bread &amp;amp; Butter&lt;br /&gt;
|Pie&lt;br /&gt;
|Buns&lt;br /&gt;
|Danish&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Croissant&lt;br /&gt;
|-&lt;br /&gt;
|Cheese&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Ice cream&lt;br /&gt;
|Butter&lt;br /&gt;
|Yogurt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=497</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=497"/>
		<updated>2017-07-15T20:02:45Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Life|Long Term|Short Term&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Bread &amp;amp; Butter&lt;br /&gt;
|Pie&lt;br /&gt;
|Buns&lt;br /&gt;
|Danish&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Croissant&lt;br /&gt;
|-&lt;br /&gt;
|Cheese&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Ice cream&lt;br /&gt;
|Butter&lt;br /&gt;
|Yogurt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=496</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=496"/>
		<updated>2017-07-15T20:01:43Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Plan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Bread &amp;amp; Butter&lt;br /&gt;
|Pie&lt;br /&gt;
|Buns&lt;br /&gt;
|Danish&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Croissant&lt;br /&gt;
|-&lt;br /&gt;
|Cheese&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Ice cream&lt;br /&gt;
|Butter&lt;br /&gt;
|Yogurt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=495</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=495"/>
		<updated>2017-02-19T06:52:00Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Basics of Spanish =&lt;br /&gt;
&lt;br /&gt;
== Gender of Nouns ==&lt;br /&gt;
&lt;br /&gt;
=== The general rule ===&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
=== Masculine to Feminine ===&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
=== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
=== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
=== More Feminine Noun rules ===&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
== Plural Forms of Nouns ==&lt;br /&gt;
&lt;br /&gt;
=== Definite Articles in the Plural Form ===&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Vowel Ending ===&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
=== Consonant Ending ===&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;-ión&amp;quot; Ending ===&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;-z&amp;quot; Ending ===&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
=== Maschuline and Feminine Plural Nouns Combined ===&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
=== Compound Nouns ===&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
== Definite Articles ==&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
=== Spanish Definite Article ===&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
=== Spanish&amp;#039;s Unique Uses of the Definite Article ===&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
=== Days of the Week ===&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
=== Season of the Year ===&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
=== With More Than One Nouns ===&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
=== Generic Nouns ===&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
=== Names of Languages ===&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
=== Clothing, Human Body and Personal Items ===&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;br /&gt;
&lt;br /&gt;
=== Verb Infinitives ===&lt;br /&gt;
&lt;br /&gt;
Infinitive in English is the verb name which translate into &amp;quot;to x&amp;quot;. For example &amp;quot;comprar&amp;quot; is an infinitive form of the verb which means &amp;quot;to buy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In Spanish, we can say &amp;quot;smoking is prohibited&amp;quot; with using the verb infinitive and the Spanish definitive article.&lt;br /&gt;
&lt;br /&gt;
* El fumar está prohobido = Smoking is prohibited.&lt;br /&gt;
&lt;br /&gt;
=== Prior to the Names of Certain Countries ===&lt;br /&gt;
&lt;br /&gt;
* Only for certain countries:&lt;br /&gt;
** For example, el Reino Unido (the UK), la India (India), la China (China)&lt;br /&gt;
&lt;br /&gt;
* Voy a México = I am going to Mexico.&lt;br /&gt;
* We use the definite article when there is an adjective describing the noun&lt;br /&gt;
** Voy al México bello = I am going to beautiful Mexico.&lt;br /&gt;
* Note. &amp;quot;al&amp;quot; = &amp;quot;a&amp;quot; + &amp;quot;el&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Street Names ===&lt;br /&gt;
&lt;br /&gt;
* Streets, avenues, plazas and similar places are usually preceded by a definite article.&lt;br /&gt;
** La Casa Blanca es la residencia de Barack Obama = The White House is the residence of Barack Obama.&lt;br /&gt;
&lt;br /&gt;
=== Personal Titles ===&lt;br /&gt;
&lt;br /&gt;
* A definite article is used before the personal titles when you are talking about people not when you are speaking directly to them.&lt;br /&gt;
** La señora Lopez está ocupada = Mrs. Lopez is busy.&lt;br /&gt;
** Señor Jones, estás bien? = Mr. Jones, are you alright?&lt;br /&gt;
&lt;br /&gt;
=== Certain Set Phrases ===&lt;br /&gt;
&lt;br /&gt;
These are set expressions/phrases that cannot be changed. These usually involve locations/places.&lt;br /&gt;
&lt;br /&gt;
* En el espacio (in space)&lt;br /&gt;
* En la televisión (on television)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=494</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=494"/>
		<updated>2017-02-19T06:50:26Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
=== Definite Articles ===&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
==== Spanish Definite Article ====&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
==== Spanish&amp;#039;s Unique Uses of the Definite Article ====&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
==== Days of the Week ====&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
==== Season of the Year ====&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
==== With More Than One Nouns ====&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
==== Generic Nouns ====&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
==== Names of Languages ====&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
==== Clothing, Human Body and Personal Items ====&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;br /&gt;
&lt;br /&gt;
==== Verb Infinitives ====&lt;br /&gt;
&lt;br /&gt;
Infinitive in English is the verb name which translate into &amp;quot;to x&amp;quot;. For example &amp;quot;comprar&amp;quot; is an infinitive form of the verb which means &amp;quot;to buy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In Spanish, we can say &amp;quot;smoking is prohibited&amp;quot; with using the verb infinitive and the Spanish definitive article.&lt;br /&gt;
&lt;br /&gt;
* El fumar está prohobido = Smoking is prohibited.&lt;br /&gt;
&lt;br /&gt;
==== Prior to the Names of Certain Countries ====&lt;br /&gt;
&lt;br /&gt;
* Only for certain countries:&lt;br /&gt;
** For example, el Reino Unido (the UK), la India (India), la China (China)&lt;br /&gt;
&lt;br /&gt;
* Voy a México = I am going to Mexico.&lt;br /&gt;
* We use the definite article when there is an adjective describing the noun&lt;br /&gt;
** Voy al México bello = I am going to beautiful Mexico.&lt;br /&gt;
* Note. &amp;quot;al&amp;quot; = &amp;quot;a&amp;quot; + &amp;quot;el&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Street Names ====&lt;br /&gt;
&lt;br /&gt;
* Streets, avenues, plazas and similar places are usually preceded by a definite article.&lt;br /&gt;
** La Casa Blanca es la residencia de Barack Obama = The White House is the residence of Barack Obama.&lt;br /&gt;
&lt;br /&gt;
==== Personal Titles ====&lt;br /&gt;
&lt;br /&gt;
* A definite article is used before the personal titles when you are talking about people not when you are speaking directly to them.&lt;br /&gt;
** La señora Lopez está ocupada = Mrs. Lopez is busy.&lt;br /&gt;
** Señor Jones, estás bien? = Mr. Jones, are you alright?&lt;br /&gt;
&lt;br /&gt;
==== Certain Set Phrases ====&lt;br /&gt;
&lt;br /&gt;
These are set expressions/phrases that cannot be changed. These usually involve locations/places.&lt;br /&gt;
&lt;br /&gt;
* En el espacio (in space)&lt;br /&gt;
* En la televisión (on television)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=493</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=493"/>
		<updated>2017-02-19T06:49:29Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Basics of Spanish =&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
=== Definite Articles ===&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
==== Spanish Definite Article ====&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
==== Spanish&amp;#039;s Unique Uses of the Definite Article ====&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
==== Days of the Week ====&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
==== Season of the Year ====&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
==== With More Than One Nouns ====&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
==== Generic Nouns ====&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
==== Names of Languages ====&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
==== Clothing, Human Body and Personal Items ====&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;br /&gt;
&lt;br /&gt;
==== Verb Infinitives ====&lt;br /&gt;
&lt;br /&gt;
Infinitive in English is the verb name which translate into &amp;quot;to x&amp;quot;. For example &amp;quot;comprar&amp;quot; is an infinitive form of the verb which means &amp;quot;to buy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In Spanish, we can say &amp;quot;smoking is prohibited&amp;quot; with using the verb infinitive and the Spanish definitive article.&lt;br /&gt;
&lt;br /&gt;
* El fumar está prohobido = Smoking is prohibited.&lt;br /&gt;
&lt;br /&gt;
==== Prior to the Names of Certain Countries ====&lt;br /&gt;
&lt;br /&gt;
* Only for certain countries:&lt;br /&gt;
** For example, el Reino Unido (the UK), la India (India), la China (China)&lt;br /&gt;
&lt;br /&gt;
* Voy a México = I am going to Mexico.&lt;br /&gt;
* We use the definite article when there is an adjective describing the noun&lt;br /&gt;
** Voy al México bello = I am going to beautiful Mexico.&lt;br /&gt;
* Note. &amp;quot;al&amp;quot; = &amp;quot;a&amp;quot; + &amp;quot;el&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Street Names ====&lt;br /&gt;
&lt;br /&gt;
* Streets, avenues, plazas and similar places are usually preceded by a definite article.&lt;br /&gt;
** La Casa Blanca es la residencia de Barack Obama = The White House is the residence of Barack Obama.&lt;br /&gt;
&lt;br /&gt;
==== Personal Titles ====&lt;br /&gt;
&lt;br /&gt;
* A definite article is used before the personal titles when you are talking about people not when you are speaking directly to them.&lt;br /&gt;
** La señora Lopez está ocupada = Mrs. Lopez is busy.&lt;br /&gt;
** Señor Jones, estás bien? = Mr. Jones, are you alright?&lt;br /&gt;
&lt;br /&gt;
==== Certain Set Phrases ====&lt;br /&gt;
&lt;br /&gt;
These are set expressions/phrases that cannot be changed. These usually involve locations/places.&lt;br /&gt;
&lt;br /&gt;
* En el espacio (in space)&lt;br /&gt;
* En la televisión (on television)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=492</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=492"/>
		<updated>2017-02-19T06:48:59Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Definite Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
=== Definite Articles ===&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
==== Spanish Definite Article ====&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
==== Spanish&amp;#039;s Unique Uses of the Definite Article ====&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
==== Days of the Week ====&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
==== Season of the Year ====&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
==== With More Than One Nouns ====&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
==== Generic Nouns ====&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
==== Names of Languages ====&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
==== Clothing, Human Body and Personal Items ====&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;br /&gt;
&lt;br /&gt;
==== Verb Infinitives ====&lt;br /&gt;
&lt;br /&gt;
Infinitive in English is the verb name which translate into &amp;quot;to x&amp;quot;. For example &amp;quot;comprar&amp;quot; is an infinitive form of the verb which means &amp;quot;to buy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In Spanish, we can say &amp;quot;smoking is prohibited&amp;quot; with using the verb infinitive and the Spanish definitive article.&lt;br /&gt;
&lt;br /&gt;
* El fumar está prohobido = Smoking is prohibited.&lt;br /&gt;
&lt;br /&gt;
==== Prior to the Names of Certain Countries ====&lt;br /&gt;
&lt;br /&gt;
* Only for certain countries:&lt;br /&gt;
** For example, el Reino Unido (the UK), la India (India), la China (China)&lt;br /&gt;
&lt;br /&gt;
* Voy a México = I am going to Mexico.&lt;br /&gt;
* We use the definite article when there is an adjective describing the noun&lt;br /&gt;
** Voy al México bello = I am going to beautiful Mexico.&lt;br /&gt;
* Note. &amp;quot;al&amp;quot; = &amp;quot;a&amp;quot; + &amp;quot;el&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Street Names ====&lt;br /&gt;
&lt;br /&gt;
* Streets, avenues, plazas and similar places are usually preceded by a definite article.&lt;br /&gt;
** La Casa Blanca es la residencia de Barack Obama = The White House is the residence of Barack Obama.&lt;br /&gt;
&lt;br /&gt;
==== Personal Titles ====&lt;br /&gt;
&lt;br /&gt;
* A definite article is used before the personal titles when you are talking about people not when you are speaking directly to them.&lt;br /&gt;
** La señora Lopez está ocupada = Mrs. Lopez is busy.&lt;br /&gt;
** Señor Jones, estás bien? = Mr. Jones, are you alright?&lt;br /&gt;
&lt;br /&gt;
==== Certain Set Phrases ====&lt;br /&gt;
&lt;br /&gt;
These are set expressions/phrases that cannot be changed. These usually involve locations/places.&lt;br /&gt;
&lt;br /&gt;
* En el espacio (in space)&lt;br /&gt;
* En la televisión (on television)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=491</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=491"/>
		<updated>2017-02-19T06:46:15Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Definite Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
=== Definite Articles ===&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
==== Spanish Definite Article ====&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
==== Spanish&amp;#039;s Unique Uses of the Definite Article ====&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
==== Days of the Week ====&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
==== Season of the Year ====&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
==== With More Than One Nouns ====&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
==== Generic Nouns ====&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
==== Names of Languages ====&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
==== Clothing, Human Body and Personal Items ====&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;br /&gt;
&lt;br /&gt;
==== Verb Infinitives ====&lt;br /&gt;
&lt;br /&gt;
Infinitive in English is the verb name which translate into &amp;quot;to x&amp;quot;. For example &amp;quot;comprar&amp;quot; is an infinitive form of the verb which means &amp;quot;to buy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In Spanish, we can say &amp;quot;smoking is prohibited&amp;quot; with using the verb infinitive and the Spanish definitive article.&lt;br /&gt;
&lt;br /&gt;
* El fumar está prohobido = Smoking is prohibited.&lt;br /&gt;
&lt;br /&gt;
==== Prior to the Names of Certain Countries ====&lt;br /&gt;
&lt;br /&gt;
* Only for certain countries:&lt;br /&gt;
** For example, el Reino Unido (the UK), la India (India), la China (China)&lt;br /&gt;
&lt;br /&gt;
* Voy a México = I am going to Mexico.&lt;br /&gt;
* We use the definite article when there is an adjective describing the noun&lt;br /&gt;
** Voy al México bello = I am going to beautiful Mexico.&lt;br /&gt;
* Note. &amp;quot;al&amp;quot; = &amp;quot;a&amp;quot; + &amp;quot;el&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Street Names ====&lt;br /&gt;
&lt;br /&gt;
* Streets, avenues, plazas and similar places are usually preceded by a definite article.&lt;br /&gt;
** La Casa Blanca es la residencia de Barack Obama = The White House is the residence of Barack Obama.&lt;br /&gt;
&lt;br /&gt;
==== Personal Titles ====&lt;br /&gt;
&lt;br /&gt;
A definite article is used before the personal titles when you are talking about people not when you are speaking directly to them.&lt;br /&gt;
&lt;br /&gt;
* La señora Lopez está ocupada = Mrs. Lopez is busy.&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=490</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=490"/>
		<updated>2017-02-19T06:35:16Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Definite Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
=== Definite Articles ===&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
==== Spanish Definite Article ====&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
==== Spanish&amp;#039;s Unique Uses of the Definite Article ====&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
==== Days of the Week ====&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
==== Season of the Year ====&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
==== With More Than One Nouns ====&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
==== Generic Nouns ====&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
==== Names of Languages ====&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
==== Clothing, Human Body and Personal Items ====&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=489</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=489"/>
		<updated>2017-02-19T06:34:08Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Definite Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
== Definite Articles ==&lt;br /&gt;
&lt;br /&gt;
el, la, los, las.&lt;br /&gt;
&lt;br /&gt;
The definite article in Spanish must agree with the gender and number of the noun that follows it.&lt;br /&gt;
&lt;br /&gt;
=== Spanish Definite Article ===&lt;br /&gt;
&lt;br /&gt;
* El colegio = The school&lt;br /&gt;
&lt;br /&gt;
* La manzana = The apple&lt;br /&gt;
&lt;br /&gt;
* Los chicos = The boys&lt;br /&gt;
&lt;br /&gt;
* Las chicas = The girls&lt;br /&gt;
&lt;br /&gt;
=== Spanish&amp;#039;s Unique Uses of the Definite Article ===&lt;br /&gt;
&lt;br /&gt;
The following topics require the definite article:&lt;br /&gt;
&lt;br /&gt;
* Days of the week&lt;br /&gt;
* Seasons of the year&lt;br /&gt;
* With more than one nouns&lt;br /&gt;
* Before the names of some countries&lt;br /&gt;
* With generic nouns&lt;br /&gt;
* With names of languages&lt;br /&gt;
* With clothing, body parts and other personal items&lt;br /&gt;
* With infinitives used as subjects&lt;br /&gt;
* Before names of streets&lt;br /&gt;
* With personal titles&lt;br /&gt;
* In certain set phrases&lt;br /&gt;
&lt;br /&gt;
=== Days of the Week ===&lt;br /&gt;
&lt;br /&gt;
* el lunes (Monday), el jueves (Thursday)&lt;br /&gt;
* Note that the days of the week are all masculine because they all refer to &amp;quot;el día&amp;quot; (day) which is masculine.&lt;br /&gt;
* The days of the week are preceded by either &amp;quot;el&amp;quot; or &amp;quot;los&amp;quot; depending on whether the day is singular or plural.&lt;br /&gt;
** Voy a la biblioteca el viernes = I am going to the library on Friday.&lt;br /&gt;
** Voy a la biblioteca los viernes = I go to the library on Fridays.&lt;br /&gt;
* When using &amp;quot;ser&amp;quot; which means &amp;quot;to be&amp;quot;, the definite article is not used.&lt;br /&gt;
** Today is Sunday = Hoy es domingo.&lt;br /&gt;
&lt;br /&gt;
=== Season of the Year ===&lt;br /&gt;
&lt;br /&gt;
* Seasons usually have the definite article.&lt;br /&gt;
** Prefiero los veranos = I prefer summers. (prefrir = to prefer)&lt;br /&gt;
* It can be optional if after &amp;quot;de&amp;quot;, &amp;quot;en&amp;quot; or verb form of &amp;quot;ser&amp;quot;.&lt;br /&gt;
** No quiero estudiar en invierno = I do not want to study in the winter.&lt;br /&gt;
&lt;br /&gt;
=== With More Than One Nouns ===&lt;br /&gt;
&lt;br /&gt;
* Hoy, leo el libro y la revista = Today I am reading the book and the magazine.&lt;br /&gt;
* Quiero la camisa y los pantalones = I want the shirt and trousers.&lt;br /&gt;
&lt;br /&gt;
=== Generic Nouns ===&lt;br /&gt;
&lt;br /&gt;
* This refers to nouns that are a concept or to a substance/ideas in general, no specific.&lt;br /&gt;
** Los árabes son ricos = Arabs are rich.&lt;br /&gt;
** La manzana es sana = Apple is healthy.&lt;br /&gt;
&lt;br /&gt;
* Exception: The article is omitted after the preposition &amp;quot;de&amp;quot; which could be used to describe possession, or when the noun following &amp;quot;de&amp;quot; describes the first noun and therefore doesn&amp;#039;t refer to a specific person/thing.&lt;br /&gt;
** Los zapatos de mujeres = women&amp;#039;s shoes.&lt;br /&gt;
** Los zapatos de las mujeres = the shoes of the women.&lt;br /&gt;
&lt;br /&gt;
=== Names of Languages ===&lt;br /&gt;
&lt;br /&gt;
* El francés = French&lt;br /&gt;
* El alemán = German&lt;br /&gt;
* El español = Spanish&lt;br /&gt;
&lt;br /&gt;
* Exceptions&lt;br /&gt;
*# When the language is immediately followed by &amp;quot;en&amp;quot; which means &amp;quot;in&amp;quot;.&lt;br /&gt;
*#* En español... = In Spanish...&lt;br /&gt;
*# For a verb that is often used to describe languages such as &amp;quot;hablar&amp;quot; (to talk), &amp;quot;aprender&amp;quot; (to understand), &amp;quot;estudiar&amp;quot; (to study), and &amp;quot;saber&amp;quot; (to know).&lt;br /&gt;
*#* Hablo español = I speak Spanish.&lt;br /&gt;
*# The article is required after an adverb/preposition other than en.&lt;br /&gt;
*#* Hablo bien el español = I speak Spanish well.&lt;br /&gt;
*# The article is required when used with other verbs.&lt;br /&gt;
*#* Prefiero el francés = I prefer French.&lt;br /&gt;
&lt;br /&gt;
=== Clothing, Human Body and Personal Items ===&lt;br /&gt;
&lt;br /&gt;
* In Spanish, it is normal to use the definite article instead of the possessive adjective like in English.&lt;br /&gt;
** ¡Abre los ojos! = Open your eyes!&lt;br /&gt;
** Perdió los zapatos = He lost his shoes.&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=488</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=488"/>
		<updated>2017-02-19T05:00:39Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;br /&gt;
&lt;br /&gt;
== Definite Articles ==&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=487</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=487"/>
		<updated>2017-02-10T07:39:51Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Plural Forms of Nouns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== Definite Articles in the Plural Form ====&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;el&amp;quot; becomes &amp;quot;los&amp;quot;&lt;br /&gt;
* &amp;quot;la&amp;quot; becomes &amp;quot;las&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Vowel Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a vowel, then it becomes plural by adding the letter &amp;quot;s&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* casa (house) =&amp;gt; casas&lt;br /&gt;
* el libro (book) =&amp;gt; los libros&lt;br /&gt;
* la pluma (pen) =&amp;gt; las plumas&lt;br /&gt;
* el chico (boy) =&amp;gt; los chicos&lt;br /&gt;
* la señora (women referred to older women) =&amp;gt; las señoras&lt;br /&gt;
&lt;br /&gt;
==== Consonant Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in a consonant, it becomes plural by adding &amp;quot;es&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* país (country) =&amp;gt; países&lt;br /&gt;
* el borrador (draft) =&amp;gt; los borradores&lt;br /&gt;
* la universidad (university) =&amp;gt; las universidades&lt;br /&gt;
* el profesor (teacher) =&amp;gt; los profesores&lt;br /&gt;
* la ciudad (city) =&amp;gt; las ciudades&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-ión&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
If a noun ends in &amp;quot;-ión&amp;quot;, add &amp;quot;-es&amp;quot; and drop the written accent.&lt;br /&gt;
&lt;br /&gt;
* el avión (aeroplane) =&amp;gt; los aviones (Note. this is &amp;#039;&amp;#039;masculine&amp;#039;&amp;#039;, exception of the above rule.)&lt;br /&gt;
* la conversación (conversation) =&amp;gt; las conversaciones&lt;br /&gt;
* la sección (section) =&amp;gt; las secciones&lt;br /&gt;
* la televisión (TV) =&amp;gt; las televisiones&lt;br /&gt;
&lt;br /&gt;
==== &amp;quot;-z&amp;quot; Ending ====&lt;br /&gt;
&lt;br /&gt;
Noun ends in &amp;quot;-z&amp;quot;, add &amp;quot;-es&amp;quot; and change the &amp;quot;z&amp;quot; to &amp;quot;c&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* el lápiz =&amp;gt; los lápices&lt;br /&gt;
* la voz (voice) =&amp;gt; las voces&lt;br /&gt;
* el tapiz (wallpaper) =&amp;gt; los tapices&lt;br /&gt;
* la actriz (actress) =&amp;gt; la actrices&lt;br /&gt;
&lt;br /&gt;
==== Maschuline and Feminine Plural Nouns Combined ====&lt;br /&gt;
&lt;br /&gt;
When the plural refers to two or more nouns of different genders, the masculine plural is used.&lt;br /&gt;
&lt;br /&gt;
* 1 camello (camel) + 4 camellas = 5 camellos&lt;br /&gt;
&lt;br /&gt;
==== Compound Nouns ====&lt;br /&gt;
&lt;br /&gt;
Compound nouns are always masculine, therefor in the plural form the definite article changes from &amp;quot;el&amp;quot; to &amp;quot;los&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* abre (open) + latas (cans) = abrelatas (can opener)&lt;br /&gt;
** el abrelatas =&amp;gt; los abrelatas&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=486</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=486"/>
		<updated>2017-02-10T07:24:26Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* The Basics of Spanish */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;br /&gt;
&lt;br /&gt;
=== Plural Forms of Nouns ===&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=485</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=485"/>
		<updated>2017-02-09T06:42:00Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Gender of Nouns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional masculine nouns ending in &amp;quot;a&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
==== Exceptional feminine nouns ending in &amp;quot;o&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
==== More Feminine Noun rules ====&lt;br /&gt;
&lt;br /&gt;
Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;br /&gt;
* la conversación (conversation)&lt;br /&gt;
* la ciudad (city)&lt;br /&gt;
* la actitud (attitude)&lt;br /&gt;
* la libertad (liberty)&lt;br /&gt;
* la certidumbre (certainty)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=484</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=484"/>
		<updated>2017-02-09T06:39:27Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Gender of Nouns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
Exceptional masculine nouns ending in &amp;quot;a&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;br /&gt;
&lt;br /&gt;
Exceptional feminine nouns ending in &amp;quot;o&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* la mano (hand)&lt;br /&gt;
* la radio (radio)&lt;br /&gt;
&lt;br /&gt;
More Feminine Noun rules: Nouns ending in &amp;#039;&amp;#039;&amp;#039;-sión&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-ción&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-dad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tad&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-tud&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;-umbre&amp;#039;&amp;#039;&amp;#039; are feminine.&lt;br /&gt;
&lt;br /&gt;
* la televisión (TV)&lt;br /&gt;
* la decisión (decision)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=483</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=483"/>
		<updated>2017-02-09T06:36:12Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Gender of Nouns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
* el mundo = world&lt;br /&gt;
* el chico = boy&lt;br /&gt;
* el colegio = school&lt;br /&gt;
* el coche = car&lt;br /&gt;
* el miedo = fear&lt;br /&gt;
&lt;br /&gt;
* la chica = girl&lt;br /&gt;
* la piscina = swimming pool&lt;br /&gt;
* la mesa = table&lt;br /&gt;
* la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* el gato =&amp;gt; la gata (cat)&lt;br /&gt;
* el perro =&amp;gt; la perra (dog)&lt;br /&gt;
* el chico (boy) =&amp;gt; la chica (girl)&lt;br /&gt;
* el hermano (brother) =&amp;gt; la hermana (sister)&lt;br /&gt;
&lt;br /&gt;
Note. Words that have feminine meanings or connotations tend to be a feminine word. Exceptions:&lt;br /&gt;
&lt;br /&gt;
* el vestido (dress)&lt;br /&gt;
* la corbata (tie)&lt;br /&gt;
&lt;br /&gt;
More examples:&lt;br /&gt;
&lt;br /&gt;
* el doctor =&amp;gt; la doctora (doctor)&lt;br /&gt;
* el profesor =&amp;gt; la profesora (teacher)&lt;br /&gt;
&lt;br /&gt;
Exceptional Examples. In some cases, the actual noun does not change, but the article does in accordance to whom it is referring to.&lt;br /&gt;
&lt;br /&gt;
* el estudiante =&amp;gt; la estudiante (student)&lt;br /&gt;
* el artista =&amp;gt; la artista (artist)&lt;br /&gt;
&lt;br /&gt;
Exceptional maschuline nouns ending with &amp;quot;a&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* el problema (problem)&lt;br /&gt;
* el mapa (map)&lt;br /&gt;
* el tema (issue)&lt;br /&gt;
* el sistema (system)&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=482</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=482"/>
		<updated>2017-02-09T06:29:30Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Gender of Nouns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
*el mundo = world&lt;br /&gt;
*el chico = boy&lt;br /&gt;
*el colegio = school&lt;br /&gt;
*el coche = car&lt;br /&gt;
*el miedo = fear&lt;br /&gt;
&lt;br /&gt;
*la chica = girl&lt;br /&gt;
*la piscina = swimming pool&lt;br /&gt;
*la mesa = table&lt;br /&gt;
*la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;br /&gt;
&lt;br /&gt;
No general rule.&lt;br /&gt;
&lt;br /&gt;
* cat: el gato =&amp;gt; la gata&lt;br /&gt;
* dog: el perro =&amp;gt; la perra&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=481</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=481"/>
		<updated>2017-02-09T06:28:33Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;br /&gt;
&lt;br /&gt;
=== Gender of Nouns ===&lt;br /&gt;
&lt;br /&gt;
==== The general rule ====&lt;br /&gt;
&lt;br /&gt;
If a word ends in &amp;quot;o&amp;quot; it is usually masculine. If a word ends in &amp;quot;a&amp;quot; it is usually feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;the&amp;quot; = &amp;quot;el&amp;quot; for masculine, &amp;quot;la&amp;quot; for feminine.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;a&amp;quot; = &amp;quot;un&amp;quot; in masculine, &amp;quot;una&amp;quot; is feminine&lt;br /&gt;
&lt;br /&gt;
*el mundo = world&lt;br /&gt;
*el chico = boy&lt;br /&gt;
*el colegio = school&lt;br /&gt;
*el coche = car&lt;br /&gt;
*el miedo = fear&lt;br /&gt;
&lt;br /&gt;
*la chica = girl&lt;br /&gt;
*la piscina = swimming pool&lt;br /&gt;
*la mesa = table&lt;br /&gt;
*la libertad = liberty&lt;br /&gt;
&lt;br /&gt;
==== Masculine to Feminine ====&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=480</id>
		<title>Spanish 101</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Spanish_101&amp;diff=480"/>
		<updated>2017-02-09T06:23:04Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: Created page with &amp;quot;== The Basics of Spanish ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Basics of Spanish ==&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=479</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Main_Page&amp;diff=479"/>
		<updated>2017-02-09T06:22:50Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
&lt;br /&gt;
* Ongoing&lt;br /&gt;
# Statistics, Machine Learning, and Data Science&lt;br /&gt;
# [[Neural Networks (Geoffrey Hinton Course)]]&lt;br /&gt;
# [[Spanish 101]]&lt;br /&gt;
&lt;br /&gt;
* Intermittent (at least once a month)&lt;br /&gt;
&lt;br /&gt;
# Cryptography&lt;br /&gt;
# Weekly Articles (Atlantic, Economist)&lt;br /&gt;
# Novels&lt;br /&gt;
&lt;br /&gt;
* Backlog&lt;br /&gt;
&lt;br /&gt;
# TypeScript and Other Web-related technologies&lt;br /&gt;
# Spanish&lt;br /&gt;
# Japanese&lt;br /&gt;
# French&lt;br /&gt;
# English Advanced Writing/Reading&lt;br /&gt;
# Physics&lt;br /&gt;
# Numberical Analysis&lt;br /&gt;
&lt;br /&gt;
== Job Options ==&lt;br /&gt;
&lt;br /&gt;
# Software Developer&lt;br /&gt;
# Data Scientist&lt;br /&gt;
# Hedge Fund&lt;br /&gt;
# Academics - Applied Math&lt;br /&gt;
# Academics - Computer Science&lt;br /&gt;
# Academics - Business Schools, e.g. Operations Research&lt;br /&gt;
# Academics - Mathematics&lt;br /&gt;
&lt;br /&gt;
== Priorities ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Data Science]]&lt;br /&gt;
# [[Oracle]]&lt;br /&gt;
# [[Git Tips]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
# [[OLAP]]&lt;br /&gt;
# [[Visualization]]&lt;br /&gt;
# [[D3.js]]&lt;br /&gt;
# [[MapReduce]]&lt;br /&gt;
# [[NoSQL]]&lt;br /&gt;
# [[Information Theory, Pattern Recognition, and Neural Networks]]&lt;br /&gt;
# [[Optics]]&lt;br /&gt;
# [[Multi-Pivot Quicksort]]&lt;br /&gt;
&lt;br /&gt;
== Things to Do NOW ==&lt;br /&gt;
&lt;br /&gt;
# [[HubAnalytics]]&lt;br /&gt;
# Look into Differential poset problem&lt;br /&gt;
# Learn [[Discrete Morse Theory]]&lt;br /&gt;
# Solve the P//G problem at least for rank 2 graph!! NO&lt;br /&gt;
# Submit rainbow graph paper to a journal&lt;br /&gt;
# Apply for Conferences&lt;br /&gt;
# Apply for Internship: http://www.gs.com&lt;br /&gt;
# Study Machine Learning: http://courses.csail.mit.edu/6.867/wiki/index.php?title=6.867_Machine_Learning_(2011_Fall)&lt;br /&gt;
# Study Graphical Models: https://stellar.mit.edu/S/course/6/fa11/6.438/&lt;br /&gt;
# CFA level 1&lt;br /&gt;
# Coding theory and combinatorial optimization (linear programming)&lt;br /&gt;
&lt;br /&gt;
== Teaching ==&lt;br /&gt;
&lt;br /&gt;
# [[18.02 Calculus]]&lt;br /&gt;
&lt;br /&gt;
== Housing ==&lt;br /&gt;
&lt;br /&gt;
# [[Housing]]&lt;br /&gt;
&lt;br /&gt;
== List of Projects ==&lt;br /&gt;
&lt;br /&gt;
# [[Affine Balanced Labellings]]&lt;br /&gt;
# [[Affine Quasisymmetric Functions]]&lt;br /&gt;
# [[Differential Posets]]&lt;br /&gt;
# [[Permutation RSK distribution]]&lt;br /&gt;
# [[Hopf Algebras]]&lt;br /&gt;
# [[Groups Acting on Posets]]&lt;br /&gt;
# &amp;lt;strike&amp;gt;Stanley&amp;#039;s Cycle Problem: http://math.mit.edu/~ahmorales/mywiki/doku.php?id=cycles:stanley_s_cycle_problem&amp;lt;/strike&amp;gt;&lt;br /&gt;
# [[Eigenvalue Problem]]&lt;br /&gt;
# [[Markov Chains and Schubert Polynomials]]&lt;br /&gt;
# [[Toric Arrangements and Arithmetic Matroids]]&lt;br /&gt;
# [[Restricted Partition Posets and Specht Modules]]&lt;br /&gt;
&lt;br /&gt;
== List of Big Problems ==&lt;br /&gt;
&lt;br /&gt;
# Finding the percolation threshold&lt;br /&gt;
# Prove that 3-sum problem takes at least $n^2 \log n$ or find faster algorithm.&lt;br /&gt;
# Shellsort increment sequence and time complexity http://en.wikipedia.org/wiki/Shellsort&lt;br /&gt;
# Find efficient and &amp;quot;symmetric&amp;quot; algorithm for deletion in Binary Search Tree.&lt;br /&gt;
# Find a deterministic (fast) algorithm to get the square root of a number modulo $p$ where $p$ is a prime and $p \equiv 1$ mod 4.&lt;br /&gt;
# Is breaking RSA as hard as factoring? (major open problem) In other words, computing an $e$-th root modulo $N=pq$ (given $gcd(e, \phi(N)) = 1$) is as hard as factoring $N$.&lt;br /&gt;
# In the RSA setting, given an efficient algorithm to compute the 3rd root modulo $N$ (i.e. $e = 3$), is there an efficient algorithm to factor $N$? (The answer is true for $e = 2$ but $gcd(2, \phi(N)) \neq 1$ in this case.)&lt;br /&gt;
&lt;br /&gt;
== Theories I need to learn ==&lt;br /&gt;
&lt;br /&gt;
# Review algebraic geometry with cohomology theory&lt;br /&gt;
# Coxeter groups, root systems, Hecke Algebras&lt;br /&gt;
# Crystals&lt;br /&gt;
# Promotion and Evacuation&lt;br /&gt;
# Fulton&amp;#039;s Young Tableaux&lt;br /&gt;
# [[Tropical RSK Correspondence]]&lt;br /&gt;
&lt;br /&gt;
== Dictionary ==&lt;br /&gt;
&lt;br /&gt;
# [[Promotion and Evacuation]]&lt;br /&gt;
# [[Hecke Algebras]]&lt;br /&gt;
# [[Grothendieck Groups]]&lt;br /&gt;
# [[Ito Calculus]]&lt;br /&gt;
# [[Machine Learning]]&lt;br /&gt;
&lt;br /&gt;
== Random Ideas ==&lt;br /&gt;
&lt;br /&gt;
* When proving a structure constant of some multiplication with conjectural structure constant C, &amp;lt;br&amp;gt; define $\mu(X_a, X_B) := \sum C_{a,b}^c X_c$ and show that $\mu(1,X_a) = X_a$ and $\mu(X_r X_a,X_b) = \mu(X_r, X_a X_b)$ for $X_r, r\in S$ where $S$ generates R. Then $\mu$ should be the multiplication.&lt;br /&gt;
&lt;br /&gt;
== Android App Ideas ==&lt;br /&gt;
&lt;br /&gt;
* Convert zip codes to city, State. (first need to build the database.)&lt;br /&gt;
&lt;br /&gt;
== Papers to read ==&lt;br /&gt;
&lt;br /&gt;
* On the cd-index and gamma-vector of S*-shellable CW-spheres - Satoshi Murai, Eran Nevo&lt;br /&gt;
We show that the $\gamma$-vector of the order complex of any polytope is the f-vector of a balanced simplicial complex. This is done by proving this statement for a subclass of Stanley&amp;#039;s S-shellable spheres which includes all polytopes. The proof shows that certain parts of the cd-index, when specializing $c=1$ and considering the resulted polynomial in $d$, are the f-polynomials of simplicial complexes that can be colored with &amp;quot;few&amp;quot; colors. We conjecture that the cd-index of a regular CW-sphere is itself the flag f-vector of a colored simplicial complex in a certain sense.&lt;br /&gt;
http://arxiv.org/pdf/1102.0096v1&lt;br /&gt;
&lt;br /&gt;
* KP solitons, total positivity, and cluster algebras - Yuji Kodamaa and Lauren K. Williams&lt;br /&gt;
Soliton solutions of the KP equation have been studied since 1970, when Kadomtsev and Petviashvili [Kadomtsev BB, Petviashvili VI (1970) Sov Phys Dokl 15:539–541] proposed a two-dimensional nonlinear dispersive wave equation now known as the KP equation. It is well-known that the Wronskian approach to the KP equation provides a method to construct soliton solutions. The regular soliton solutions that one obtains in this way come from points of the totally nonnegative part of the Grassmannian. In this paper we explain how the theory of total positivity and cluster algebras provides a framework for understanding these soliton solutions to the KP equation. We then use this framework to give an explicit construction of certain soliton contour graphs and solve the inverse problem for soliton solutions coming from the totally positive part of the Grassmannian.&lt;br /&gt;
http://arxiv.org/abs/1106.0023&lt;br /&gt;
&lt;br /&gt;
== List of Problems ==&lt;br /&gt;
&lt;br /&gt;
*Prove positivity for linear Laurent phenomenon algebras &amp;amp; polytopality of linear Laurent phenomenon complexes&lt;br /&gt;
http://arxiv.org/abs/1206.2611&lt;br /&gt;
&lt;br /&gt;
*Bunkbed conjecture - Svante linusson&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930738&lt;br /&gt;
http://journals.cambridge.org/action/displayAbstract?fromPage=online&amp;amp;aid=7930750&lt;br /&gt;
&lt;br /&gt;
*Bona&amp;#039;s Conjecture on Product of Cycles&lt;br /&gt;
$u \cdot v = w$ where $u$ and $v$ are long cycles, probability that 1 and 2 are in the same cycle of $w$&lt;br /&gt;
&lt;br /&gt;
*Conjecture of Thomas Lam on Affine NilCoxeter Algebras&lt;br /&gt;
http://arxiv.org/pdf/1007.2871v1&lt;br /&gt;
&lt;br /&gt;
*Pieri rule for toric Schur functions and Affine Stanley symmetric functions&lt;br /&gt;
http://arxiv.org/pdf/math/0501335v1&lt;br /&gt;
&lt;br /&gt;
*Let $n\geq 2$ and $t \geq 0$. Let $f(n,t)$ be the number of sequences with $n$ $x$&amp;#039;s and $2t$ $a_{ij}$&amp;#039;s, where $1\leq i &amp;lt; j \leq n$, such that each $a_{ij}$ occurs between the i-th $x$ and the j-th $x$ in the sequence. (Thus the total number of terms in each sequence is $n + 2t\binom{n}{2}$.) Then,&lt;br /&gt;
$f(n,t) = \frac{(n+tn(n-1))!}{n!t!^n(2t)!^{\binom{n}{2}}} \displaystyle\prod_{j=1}^{n} \frac{((j-1)t)!^2(jt)!}{(1+(n+j-2)t)!}$. (Problem 27 of http://math.mit.edu/~rstan/bij.pdf )&lt;br /&gt;
&lt;br /&gt;
*The n-cube $C_n$ (as a graph) is the graph with vertex set $\{ 0,1\} ^n$ (i.e., all binary n-tuples), with an edge between u and v if they differ in exactly one coordinate. Thus $C_n$ has $2^n$ vertices and $n2^{n-1}$ edges. Then,&lt;br /&gt;
&lt;br /&gt;
$c(C_n) = 2^{2^n-n-1}\displaystyle\prod_{k=1}^{n} k^{\binom{n}{k}}$,&lt;br /&gt;
&lt;br /&gt;
where c(G) is the number of spanning trees of G.&lt;br /&gt;
&lt;br /&gt;
*Find a bijection between a staircase tableaux with no $\delta$ of size $n$ and perfect matchings of $\{1,2,\ldots,2n+2\}$. http://math.mit.edu/~rstan/papers/staircase2.pdf&lt;br /&gt;
&lt;br /&gt;
*Problem of finding volumes (Ehrhart polynomials) of valuation polytope (EC1 2nd ed. Exer. 4.62)&lt;br /&gt;
&lt;br /&gt;
*Prove that $J(P)$ where $P = \{(a_0,a_1), (a_0,b_1), (a_1,a_2), (a_1,b_2), \ldots \}$ is the minimal distributive lattice with the property that it has antichains that has one element at each rank. (&amp;quot;An extremal problem for finite topologies and distributive lattices&amp;quot; - Richard Stanley http://math.mit.edu/~rstan/pubs/pubfiles/13.pdf)&lt;br /&gt;
&lt;br /&gt;
* Diffie-Hellman key exchange protocol provides a &amp;quot;non-attractive&amp;quot; way to exchanges keys between two people. Find such protocol for general $n$ people. ($n=3$ case solved by Joux, &amp;quot;A One Round Protocol for Tripartite Diffie–Hellman&amp;quot; http://cgi.di.uoa.gr/~aggelos/crypto/page4/assets/joux-tripartite.pdf)&lt;br /&gt;
&lt;br /&gt;
== Others ==&lt;br /&gt;
&lt;br /&gt;
# [[new desktop]]&lt;br /&gt;
# [[Lenovo x220]]&lt;br /&gt;
# math dept sage notebook server: http://localhost:8000/home/admin/ from runge.mit.edu&lt;br /&gt;
# office sage server: https://mathstation051.mit.edu:8000/&lt;br /&gt;
# home: https://tedyun.mit.edu:8000/&lt;br /&gt;
# repn theory of quivers http://www-fourier.ujf-grenoble.fr/~mbrion/notes_quivers_rev.pdf&lt;br /&gt;
# [[The Federal Budget Deficit: Causes, Consequences, and Potential Remedies]]&lt;br /&gt;
# [[Computer Science Master&amp;#039;s Program]]&lt;br /&gt;
# [[Emacs]]&lt;br /&gt;
# [[Networking 101]]&lt;br /&gt;
# [[New England Tour]]&lt;br /&gt;
# [[NSA Back Door to NIST]]&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=478</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=478"/>
		<updated>2017-01-15T04:07:54Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Summary of Learning Methods for Neural Networks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 \cdot MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Big) ^2$$&lt;br /&gt;
&lt;br /&gt;
* Dividing the gradient by $\sqrt{MeanSquare(w,t)}$ makes the learning work much better (Tijmen Tieleman, unpublished).&lt;br /&gt;
&lt;br /&gt;
==== Further Developements of RMSPROP ====&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with standard momentum&lt;br /&gt;
** Momentum does not help as much as it normally does. Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with Nesterov momentum (Sutskever 2012)&lt;br /&gt;
** It works best if the RMS of the recent gradients is used to divide the correction rather than the jump in the direction of accumulated corrections.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with adaptive learning rates for each connection&lt;br /&gt;
** Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Other methods related to RMSPROP&lt;br /&gt;
** Yann LeCun&amp;#039;s group has a fancy version in &amp;quot;No more pesky learning rates&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Summary of Learning Methods for Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* For small datasets (e.g. 10,000 cases) or bigger datasets without much redundancy, use a full-batch method.&lt;br /&gt;
** Conjugate gradient, LBFGS, ...&lt;br /&gt;
** Adaptive learning rates, RPROP, ...&lt;br /&gt;
&lt;br /&gt;
* For big, redundant datasets, use mini-batches.&lt;br /&gt;
** Try gradient descent with momentum.&lt;br /&gt;
** Try RMSPROP (with momentum?)&lt;br /&gt;
** Try LeCun&amp;#039;s latest recipe.&lt;br /&gt;
&lt;br /&gt;
* Why there is no simple recipe:&lt;br /&gt;
*# &amp;#039;&amp;#039;&amp;#039;Neural nets differ a lot&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*#* Very deep nets (especially ones with narrow bottlenecks).&lt;br /&gt;
*#* Recurrent nets.&lt;br /&gt;
*#* Wide shallow nets.&lt;br /&gt;
*# &amp;#039;&amp;#039;&amp;#039;Tasks differ a lot&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*#* Some require very accurate weights, some don&amp;#039;t.&lt;br /&gt;
*#* Some have many very rare cases (e.g. words).&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=477</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=477"/>
		<updated>2017-01-15T04:07:23Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Summary of Learning Methods for Neural Networks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 \cdot MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Big) ^2$$&lt;br /&gt;
&lt;br /&gt;
* Dividing the gradient by $\sqrt{MeanSquare(w,t)}$ makes the learning work much better (Tijmen Tieleman, unpublished).&lt;br /&gt;
&lt;br /&gt;
==== Further Developements of RMSPROP ====&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with standard momentum&lt;br /&gt;
** Momentum does not help as much as it normally does. Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with Nesterov momentum (Sutskever 2012)&lt;br /&gt;
** It works best if the RMS of the recent gradients is used to divide the correction rather than the jump in the direction of accumulated corrections.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with adaptive learning rates for each connection&lt;br /&gt;
** Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Other methods related to RMSPROP&lt;br /&gt;
** Yann LeCun&amp;#039;s group has a fancy version in &amp;quot;No more pesky learning rates&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Summary of Learning Methods for Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* For small datasets (e.g. 10,000 cases) or bigger datasets without much redundancy, use a full-batch method.&lt;br /&gt;
** Conjugate gradient, LBFGS, ...&lt;br /&gt;
** adaptive learning rates, RPROP, ...&lt;br /&gt;
&lt;br /&gt;
* For big, redundant datasets, use mini-batches.&lt;br /&gt;
** Try gradient descent with momentum.&lt;br /&gt;
** Try RMSPROP (with momentum?)&lt;br /&gt;
** Try LeCun&amp;#039;s latest recipe.&lt;br /&gt;
&lt;br /&gt;
* Why there is no simple recipe:&lt;br /&gt;
*# &amp;#039;&amp;#039;&amp;#039;Neural nets differ a lot&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*#* Very deep nets (especially ones with narrow bottlenecks).&lt;br /&gt;
*#* Recurrent nets.&lt;br /&gt;
*#* Wide shallow nets.&lt;br /&gt;
*# &amp;#039;&amp;#039;&amp;#039;Tasks differ a lot&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*#* Some require very accurate weights, some don&amp;#039;t.&lt;br /&gt;
*#* Some have many very rare cases (e.g. words).&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=476</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=476"/>
		<updated>2017-01-15T04:07:05Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Summary of Learning Methods for Neural Networks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 \cdot MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Big) ^2$$&lt;br /&gt;
&lt;br /&gt;
* Dividing the gradient by $\sqrt{MeanSquare(w,t)}$ makes the learning work much better (Tijmen Tieleman, unpublished).&lt;br /&gt;
&lt;br /&gt;
==== Further Developements of RMSPROP ====&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with standard momentum&lt;br /&gt;
** Momentum does not help as much as it normally does. Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with Nesterov momentum (Sutskever 2012)&lt;br /&gt;
** It works best if the RMS of the recent gradients is used to divide the correction rather than the jump in the direction of accumulated corrections.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with adaptive learning rates for each connection&lt;br /&gt;
** Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Other methods related to RMSPROP&lt;br /&gt;
** Yann LeCun&amp;#039;s group has a fancy version in &amp;quot;No more pesky learning rates&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Summary of Learning Methods for Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* For small datasets (e.g. 10,000 cases) or bigger datasets without much redundancy, use a full-batch method.&lt;br /&gt;
** Conjugate gradient, LBFGS, ...&lt;br /&gt;
** adaptive learning rates, RPROP, ...&lt;br /&gt;
&lt;br /&gt;
* For big, redundant datasets, use mini-batches.&lt;br /&gt;
** Try gradient descent with momentum.&lt;br /&gt;
** Try RMSPROP (with momentum?)&lt;br /&gt;
** Try LeCun&amp;#039;s latest recipe.&lt;br /&gt;
&lt;br /&gt;
* Why there is no simple recipe:&lt;br /&gt;
*# &amp;#039;&amp;#039;&amp;#039;Neural nets differ a lot&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*#* Very deep nets(especially ones with narrow bottlenecks).&lt;br /&gt;
*#* Recurrent nets.&lt;br /&gt;
*#* Wide shallow nets.&lt;br /&gt;
*# &amp;#039;&amp;#039;&amp;#039;Tasks differ a lot&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
*#* Some require very accurate weights, some don&amp;#039;t.&lt;br /&gt;
*#* Some have many very rare cases (e.g. words).&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=475</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=475"/>
		<updated>2017-01-15T04:05:54Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 \cdot MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Big) ^2$$&lt;br /&gt;
&lt;br /&gt;
* Dividing the gradient by $\sqrt{MeanSquare(w,t)}$ makes the learning work much better (Tijmen Tieleman, unpublished).&lt;br /&gt;
&lt;br /&gt;
==== Further Developements of RMSPROP ====&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with standard momentum&lt;br /&gt;
** Momentum does not help as much as it normally does. Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with Nesterov momentum (Sutskever 2012)&lt;br /&gt;
** It works best if the RMS of the recent gradients is used to divide the correction rather than the jump in the direction of accumulated corrections.&lt;br /&gt;
&lt;br /&gt;
* Combining RMSPROP with adaptive learning rates for each connection&lt;br /&gt;
** Needs more investigation.&lt;br /&gt;
&lt;br /&gt;
* Other methods related to RMSPROP&lt;br /&gt;
** Yann LeCun&amp;#039;s group has a fancy version in &amp;quot;No more pesky learning rates&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Summary of Learning Methods for Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* For small datasets (e.g. 10,000 cases) or bigger datasets without much redundancy, use a full-batch method.&lt;br /&gt;
** Conjugate gradient, LBFGS, ...&lt;br /&gt;
** adaptive learning rates, RPROP, ...&lt;br /&gt;
&lt;br /&gt;
* For big, redundant datasets, use mini-batches.&lt;br /&gt;
** Try gradient descent with momentum.&lt;br /&gt;
** Try RMSPROP (with momentum?)&lt;br /&gt;
** Try LeCun&amp;#039;s latest recipe.&lt;br /&gt;
&lt;br /&gt;
* Why there is no simple recipe: &amp;#039;&amp;#039;&amp;#039;Neural nets differ a lot&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Very deep nets(especially ones with narrow bottlenecks).&lt;br /&gt;
** Recurrent nets.&lt;br /&gt;
** Wide shallow nets.&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=474</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=474"/>
		<updated>2017-01-15T03:59:47Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 \cdot MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Big) ^2$$&lt;br /&gt;
&lt;br /&gt;
* Dividing the gradient by $\sqrt{MeanSquare(w,t)}$ makes the learning work much better (Tijmen Tieleman, unpublished).&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=473</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=473"/>
		<updated>2017-01-15T03:57:28Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Big) ^2$$&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=472</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=472"/>
		<updated>2017-01-15T03:57:14Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 MeanSquare(w, t-1) + 0.1 \Big( \frac{\partial E}{\partial w}(t) \Bit) ^2$$&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=471</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=471"/>
		<updated>2017-01-15T03:56:12Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;br /&gt;
&lt;br /&gt;
==== RPROP: Using only the sign of the gradient ====&lt;br /&gt;
&lt;br /&gt;
* The magnitude of the gradient can be very different for different weights and can change during learning.&lt;br /&gt;
** This makes it hard to choose a single global learning rate.&lt;br /&gt;
&lt;br /&gt;
* For &amp;#039;&amp;#039;full batch learning&amp;#039;&amp;#039;, we can deal with this variation by only using the sign of the gradient.&lt;br /&gt;
** The weight updates are all of the same magnitude.&lt;br /&gt;
** This escapes from plateaus with tiny gradients quickly.&lt;br /&gt;
&lt;br /&gt;
* RPROP: This combines the idea of only using the sign of the gradient with the idea of adapting the step size separately for each weight.&lt;br /&gt;
** Increase the step size for a weight &amp;#039;&amp;#039;multiplicatively&amp;#039;&amp;#039; (e.g. times 1.2) if the signs of its last two gradients agree.&lt;br /&gt;
** Otherwise decrease the step size multiplicatively (e.g. times 0.5).&lt;br /&gt;
** Limit the step sizes to be less than 50 and more than a millionth (Mike Shuster&amp;#039;s advice).&lt;br /&gt;
&lt;br /&gt;
==== Why RPROP Does Not Work with Mini-Batches ====&lt;br /&gt;
&lt;br /&gt;
* The idea behind stochastic gradient descent is that when the learning rate is small, it averages the gradients over successive mini-batches.&lt;br /&gt;
** Consider a weight that gets a gradient of +0.1 on nine mini-batches and a gradient of -0.9 on the tenth mini-batch.&lt;br /&gt;
** We want this weight to stay roughly where it is.&lt;br /&gt;
&lt;br /&gt;
* RPROP would increment the weight nine times and decrement it once by about the same amount (assuming any adaptation of the step sizes is small on this time-scale), so the weight would grow a lot.&lt;br /&gt;
* Is there a way to combine:&lt;br /&gt;
** The robustness of RPROP.&lt;br /&gt;
** The efficiency of mini-batches.&lt;br /&gt;
** The effective averaging of gradients over mini-batches.&lt;br /&gt;
&lt;br /&gt;
==== RMSPROP: Mini-Batch Version of RPROP ====&lt;br /&gt;
&lt;br /&gt;
* RPROP is equivalent to using the gradient but also dividing by the size of the gradient.&lt;br /&gt;
** The problem with mini-batch RPROP is that we divide by a different number for each mini-batch. So why not force the number we divide by to be very similar for adjacent mini-batches?&lt;br /&gt;
&lt;br /&gt;
* RMSPROP: Keep a moving average of the squared gradient for each weight.&lt;br /&gt;
$$MeanSquare(w,t) = 0.9 MeanSquare(w, t-1) + 0.1 (\partial E / \partial w (t))^2$$&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
	<entry>
		<id>https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=470</id>
		<title>Neural Networks (Geoffrey Hinton Course)</title>
		<link rel="alternate" type="text/html" href="https://wiki.tedyun.com/index.php?title=Neural_Networks_(Geoffrey_Hinton_Course)&amp;diff=470"/>
		<updated>2017-01-15T03:46:25Z</updated>

		<summary type="html">&lt;p&gt;Tedyun: /* Adaptive Learning Rates for Each Connection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Some Simple Models or Neurons ==&lt;br /&gt;
&lt;br /&gt;
$y$ output, $x_i$ input.&lt;br /&gt;
&lt;br /&gt;
=== Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$y = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$w_i$ weights, $b$ bias&lt;br /&gt;
&lt;br /&gt;
=== Binary Threshold Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq \theta$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
Or, equivalently,&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = 1$ if $z \geq 0$, $0$ otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Rectified Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = z$ if $z &amp;gt; 0$, $0$ otherwise. (linear above zero, decision at zero.)&lt;br /&gt;
&lt;br /&gt;
=== Sigmoid Neurons ===&lt;br /&gt;
&lt;br /&gt;
Give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
=== Stochastic Binary Neurons ===&lt;br /&gt;
&lt;br /&gt;
Same equations as logistic units, but outputs $1$ (=spike) or $0$ randomly based on the probability. They treat the output of the logistic as the &amp;lt;em&amp;gt;probability&amp;lt;/em&amp;gt; of producing a spike in a short time window.&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$&lt;br /&gt;
&lt;br /&gt;
$P(s = 1) = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
We can do a similar trick for rectified linear units - in this case the output is treated as the Poisson rate for spikes.&lt;br /&gt;
&lt;br /&gt;
== Types of Learning ==&lt;br /&gt;
&lt;br /&gt;
=== Supervised Learning ===&lt;br /&gt;
Learn to predict an output when given an input vector.&lt;br /&gt;
* Regression: The target output is a real number or a whole vector of real numbers.&lt;br /&gt;
* Classification: The target output is a class label.&lt;br /&gt;
&lt;br /&gt;
==== How Supervised Learning Typically Works ====&lt;br /&gt;
# Start by choosing a model-class: $y = f(x;W)$&lt;br /&gt;
#* A model-class $f$ is a way of using some numerical parameters $W$ to map each input vector $x$ into a predicted output $y$.&lt;br /&gt;
# Learning usually means adjusting the parameters to reduce the discrepancy between the target output, $t$, on each training case and the actual output, $y$, produced by the model.&lt;br /&gt;
#* For regression $\frac{1}{2}(y-t)^2$ is often a sensible measure of the discrepancy.&lt;br /&gt;
#* For classification there are other measures that are generally more sensible (they also work better).&lt;br /&gt;
&lt;br /&gt;
=== Reinforcement Learning ===&lt;br /&gt;
Learn to select an action to maximize payoff.&lt;br /&gt;
&lt;br /&gt;
* The output is an action or sequence of actions and the only supervisory signal is an occasional scalar reward.&lt;br /&gt;
** The goal in selecting each action is to maximize the expected sum of the future rewards.&lt;br /&gt;
** We usually use a discount factor for delayed rewards so that we don&amp;#039;t have to look too far into the future.&lt;br /&gt;
* Reinforcement learning is difficult because:&lt;br /&gt;
** The rewards are typically delayed so it&amp;#039;s hard to know where we went wrong (or right).&lt;br /&gt;
** A scalar reward does not supply much information.&lt;br /&gt;
* Typically you can&amp;#039;t learn millions of parameters using reinforcement learning (you can with supervised/unsupervised learning). Typically you learn dozens or thousands of parameters.&lt;br /&gt;
* Will not be covered in this course.&lt;br /&gt;
&lt;br /&gt;
=== Unsupervised Learning ===&lt;br /&gt;
Discover a good internal representation of the input.&lt;br /&gt;
&lt;br /&gt;
* For about 40 years unsupervised learning was largely ignored by the machine learning community (except for clustering).&lt;br /&gt;
* It is hard to say what the aim of unsupervised learning is:&lt;br /&gt;
** One major aim is to create an internal representation of the input that is useful for subsequent supervised or reinforcement learning.&lt;br /&gt;
** You can compute the distance to a surface by using the disparity between two images. But you don&amp;#039;t want to learn to compute disparities by stubbing your toe thousands of times.&lt;br /&gt;
* Other goals:&lt;br /&gt;
** Providing a compact, low-dimensional representation of the input.&lt;br /&gt;
*** High-dimensional inputs typically live on or near a low-dimensional manifold (or several such manifolds)&lt;br /&gt;
*** Principal Component Analysis is a widely used linear method for finding a low-dimensional representation.&lt;br /&gt;
** Providing an economical high-dimensional representation of the input in terms of learned features.&lt;br /&gt;
*** Binary features&lt;br /&gt;
*** Real-valued features that are nearly all zero&lt;br /&gt;
** Finding sensible clusters in the input&lt;br /&gt;
*** This is an example of a &amp;lt;em&amp;gt;very&amp;lt;/em&amp;gt; sparse code in which only one of the features is non-zero.&lt;br /&gt;
&lt;br /&gt;
== Neural Network Architectures ==&lt;br /&gt;
&lt;br /&gt;
# Feed-forward architecture: information comes into the input units and flows one direction through hidden layers until each reaches the output units.&lt;br /&gt;
# Recurrent neural network: information can flow around in cycles.&lt;br /&gt;
# Symmetrically connected network: weights are the same in both directions between two units.&lt;br /&gt;
&lt;br /&gt;
===  Feed-forward Neural Networks ===&lt;br /&gt;
&lt;br /&gt;
* The commonest type of neural network&lt;br /&gt;
* The first layer is the input and the last layer is the output&lt;br /&gt;
* Called &amp;quot;deep&amp;quot; neural networks if there is more than one hidden layer.&lt;br /&gt;
* They compute a series of transformations that change the similarities between cases - the activities of the neurons in each layer are a non-linear function of the activities in the layer below.&lt;br /&gt;
&lt;br /&gt;
=== Recurrent Networks ===&lt;br /&gt;
&lt;br /&gt;
* Have directed cycles in their connection graph.&lt;br /&gt;
* Have complicated dynamics — difficult to train.&lt;br /&gt;
* More biologically realistic.&lt;br /&gt;
* Very natural way to model &amp;lt;em&amp;gt;sequential&amp;lt;/em&amp;gt; data&lt;br /&gt;
* Have the ability to remember information in their hidden state for a long time (but hard to train to use this ability).&lt;br /&gt;
&lt;br /&gt;
=== Symmetrically Connected Networks ===&lt;br /&gt;
&lt;br /&gt;
* Like recurrent networks, but the connections between units are symmetrical (same weight in both directions).&lt;br /&gt;
* Much easier to analyze than recurrent networks (John Hopfield, et al)&lt;br /&gt;
* More restricted in what they can do, because they obey an energy function. for example, they cannot model cycles.&lt;br /&gt;
&lt;br /&gt;
== The First Generation of Neural Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Standard Paradigm for Statistical Pattern Recognition ===&lt;br /&gt;
&lt;br /&gt;
* Convert the raw input vector into a vector of feature activations (using hand-written programs based on common-sense to define the features).&lt;br /&gt;
* Learn how to weight each of the feature activations to get a single scalar quantity.&lt;br /&gt;
* If this quantity is above some threshold, decide that the input vector is a positive example of the target class.&lt;br /&gt;
&lt;br /&gt;
=== Perceptrons ===&lt;br /&gt;
&lt;br /&gt;
input units =&amp;gt; (by hand-coded programs) =&amp;gt; feature units =&amp;gt; decision unit&lt;br /&gt;
&lt;br /&gt;
* Popularized by Frank Rosenblatt in the early 1960s.&lt;br /&gt;
* Lots of grand claims were made for what they could learn to do.&lt;br /&gt;
* In 1969, Minsky and Papert showed Perceptrons&amp;#039; limitations (&amp;#039;&amp;#039;&amp;#039;Group Invariance Theorem&amp;#039;&amp;#039;&amp;#039;). Many people thought these limitations applied to all neural network models.&lt;br /&gt;
* Perceptron learning procedure is still widely used today for tasks with enormous feature vectors that contain many millions of features.&lt;br /&gt;
* Decision units in perceptrons are &amp;#039;&amp;#039;&amp;#039;binary threshold neurons&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Perceptron Learning Procedure ====&lt;br /&gt;
&lt;br /&gt;
# Add an extra component with value 1 to each input vector (&amp;quot;bias&amp;quot; weight) and forget about the threshold. (bias) = -(threshold)&lt;br /&gt;
# Pick training cases using any policy that ensures that every training case will keep getting picked.&lt;br /&gt;
#* If the output unit is correct, leave its weights alone.&lt;br /&gt;
#* If the output unit incorrectly outputs a zero, add the input vector to the weight vector.&lt;br /&gt;
#* If the output unit incorrectly outputs a 1, subtract the input vector from the weight vector.&lt;br /&gt;
# This is guaranteed to find a set of weights that gets the right answer for all the training cases &amp;#039;&amp;#039;if any such set exists&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Geometrical View of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* Weight space (each point corresponds to a particular setting for all the weights)&lt;br /&gt;
* Each training cases represents a hyperplane through the origin (if we eliminate the threshold/bias). That hyperplane is perpendicular to the &amp;#039;&amp;#039;input&amp;#039;&amp;#039; vector.&lt;br /&gt;
** the weights must lie on one side of this hyperplane to get the answer correctly.&lt;br /&gt;
* To get all the training cases right we need to find a point on the right side of all the planes (there may not be any such point).&lt;br /&gt;
* If there are any weight vectors that get the right answer for all cases, they lie in a hyper-cone with its apex at the origin. This means the problem is &amp;#039;&amp;#039;&amp;#039;convex&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Limitations of Perceptrons ====&lt;br /&gt;
&lt;br /&gt;
* If you are allowed to choose the features by hand and if you use enough features, you can do almost anything.&lt;br /&gt;
* But once the hand-coded features have been determined, there are very strong limitations on what a perceptron cal learn.&lt;br /&gt;
** A binary threshold output unit cannot even tell if two single bit features are the same!&lt;br /&gt;
*** Positive cases (same): $(1,1) \rightarrow 1$, $(0,0) \rightarrow 1$&lt;br /&gt;
*** Negative cases (different): $(1,0) \rightarrow 0$, $(0,1) \rightarrow 0$&lt;br /&gt;
*** The four input-output pairs give four inequalities that are impossible to satisfy.&lt;br /&gt;
** Imagine &amp;#039;data-space&amp;#039; in which the axes correspond to components of an input vector.&lt;br /&gt;
*** Each input vector is a point in this space, a weight vector defines a plane in data-space.&lt;br /&gt;
*** The weight plane is perpendicular to the weight vector and misses the origin by a distance equal to the threshold.&lt;br /&gt;
*** There are many cases where we cannot separate positive and negative cases only by a hyperplane. Those cases are called &amp;#039;&amp;#039;&amp;#039;not linearly separable&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Cannot discriminate simple patterns under translation with wrap-around.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conclusion ====&lt;br /&gt;
&lt;br /&gt;
* Networks without hidden units are very limited in the input-output mappings they can learn to model. More layers of linear units do not help, it&amp;#039;s still linear. Fixed output non-linearities are not enough.&lt;br /&gt;
* We need multiple layers of adaptive, non-linear hidden units. But how can we train such nets?&lt;br /&gt;
** We need an efficient way of adapting all the weights, not just the last layer. This is hard.&lt;br /&gt;
** Learning the weights going into hidden units is equivalent to learning features.&lt;br /&gt;
** This is difficult because nobody is telling us directly what the hidden units should do.&lt;br /&gt;
&lt;br /&gt;
== Linear Neurons ==&lt;br /&gt;
&lt;br /&gt;
=== Learning Overview ===&lt;br /&gt;
&lt;br /&gt;
$y = \sum_{i} w_i x_i = \mathbb{w}^T \mathbb{x}$&lt;br /&gt;
&lt;br /&gt;
$y$: Neuron&amp;#039;s estimate of the desired output, $\mathbb{w}$: weight vector, $\mathbb{x}$: input vector&lt;br /&gt;
&lt;br /&gt;
* Perceptron convergence procedure doesn&amp;#039;t work for more complex networks (because the problem is not &amp;#039;&amp;#039;convex&amp;#039;&amp;#039;). Multi-layer neural networks do not use the perceptron learning procedure.&lt;br /&gt;
* Instead of showing that the weights get closer to a good set of weights, we show that the actual output values get closer the target values.&lt;br /&gt;
* The aim of learning is to minimize the error summed over all training cases. The error is the squared difference between the desired output and the actual output.&lt;br /&gt;
&lt;br /&gt;
* Why don&amp;#039;t we solve it analytically?&lt;br /&gt;
** Scientific answer: We want a method that real neurons could use.&lt;br /&gt;
** Engineering answer: We want a method that can be generalized to multi-layer, non-linear neural networks.&lt;br /&gt;
&lt;br /&gt;
=== Learning Procedure ===&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;delta-rule&amp;#039;&amp;#039; for learning:&lt;br /&gt;
** $\Delta w_i = \epsilon x_i (t - y)$, $\epsilon$: learning rate, $t$: target value&lt;br /&gt;
** $E = \frac{1}{2} \sum_{n \in \text{training}} (t^n - y^n)^2$, $E$: error&lt;br /&gt;
&lt;br /&gt;
=== The Error Surface for Linear Neurons ===&lt;br /&gt;
&lt;br /&gt;
* The error surface lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl.&lt;br /&gt;
** Vertical cross-sections are parabolas.&lt;br /&gt;
** Horizontal cross-sections are ellipses&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated.&lt;br /&gt;
* The simplest kind of batch learning does steepest descent on the error surface. This travels perpendicular to the contour lines.&lt;br /&gt;
* The simplest kind of online learning zig-zags around the direction of steepest descent. This travels perpendicular to the constraint line of that particular training case.&lt;br /&gt;
&lt;br /&gt;
== Logistic Neurons ==&lt;br /&gt;
&lt;br /&gt;
$z = b + \sum_{i} x_i w_i$, $y = \frac{1}{1 + e^{-z}}$&lt;br /&gt;
&lt;br /&gt;
* These give a real-valued output that is a smooth and bounded function of their total input.&lt;br /&gt;
* The derivatives:&lt;br /&gt;
** $\frac{\partial z}{\partial w_i} = x_i$&lt;br /&gt;
** $\frac{\partial z}{\partial x_i} = w_i$&lt;br /&gt;
** $\frac{dz}{dy} = y(1-y)$&lt;br /&gt;
** By the chain rule, $\frac{\partial y}{\partial w_i} = x_i y (1-y)$.&lt;br /&gt;
** By the chain rule, $\frac{\partial E}{\partial w_i} = \sum_{n} \frac{\partial y^n}{\partial w_i} \frac{\partial E}{\partial y^n} = - \sum_{n} x_i^n y^n (1-y^n) (t^n - y^n)$.&lt;br /&gt;
&lt;br /&gt;
== The Backpropagation Algorithm ==&lt;br /&gt;
&lt;br /&gt;
=== Other Ideas ===&lt;br /&gt;
&lt;br /&gt;
==== Learning by Perturbing Weights ====&lt;br /&gt;
&lt;br /&gt;
* The ideas occurs to everyone who knows about evolution.&lt;br /&gt;
* Randomly perturb one weight and see if it improves performance. If so, save the change.&lt;br /&gt;
** This is a form of reinforcement learning.&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;Very inefficient&amp;#039;&amp;#039;&amp;#039;. We need to do mutiple forward passes on a representative set of training cases just to change one weight.&lt;br /&gt;
** Towards the end of learning, large weight perturbations will nearly always make things worse.&lt;br /&gt;
&lt;br /&gt;
==== Learning by Using Perturbations ====&lt;br /&gt;
&lt;br /&gt;
* We could randomly perturb all the weights in parallel and correlate the performance gain with the weight changes.&lt;br /&gt;
* Not any better because we need lots of trials on each training cases to see the effect of changing one weight through the noise created by all the changes to other weights.&lt;br /&gt;
* A better idea: Randomly perturb the &amp;#039;&amp;#039;activities&amp;#039;&amp;#039; of the hidden units. Once we know how we want a hidden activity to change on a given training case, we can compute how to change the weights.&lt;br /&gt;
&lt;br /&gt;
=== The Idea behind Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* We don&amp;#039;t know what the hidden units ought to do, but we can compute how fast the error changes as we change a hidden activity.&lt;br /&gt;
* We can compute error derivatives for all the hidden units efficiently at the same time.&lt;br /&gt;
** Once we have the error derivatives for the hidden activities, it&amp;#039;s easy to get the error derivatives for the weights going into a hidden unit.&lt;br /&gt;
&lt;br /&gt;
=== Sketch of the Backpropagation Algorithm ===&lt;br /&gt;
&lt;br /&gt;
* First convert the discrepance between each output and its target value into an error derivative.&lt;br /&gt;
* Then compute error derivatives in each hidden layer from error derivatives in the layer above.&lt;br /&gt;
* Then use error derivatives w.r.t. activities to get error derivatives w.r.t. the incoming weights.&lt;br /&gt;
&lt;br /&gt;
=== Using the Derivatives Computed by Backpropagation ===&lt;br /&gt;
&lt;br /&gt;
* The backpropagation algorithm is an efficient way of computing the error derivative $\partial E / \partial w$ for every weight on a single training case.&lt;br /&gt;
* To get a fully specified learning procedure, we still need to make a lot of other decisions about  how to use these error derivatives:&lt;br /&gt;
** Opimization issues: How do we use the error derivatives on individual cases to discover a good set of weights?&lt;br /&gt;
** Generalization issues: How do we ensure that the learned weights work well for cases we did not see during training?&lt;br /&gt;
&lt;br /&gt;
==== Optimization Issues ====&lt;br /&gt;
&lt;br /&gt;
* How often to update the weights:&lt;br /&gt;
** Online: after each training case.&lt;br /&gt;
** Full batch: after a full sweep through the training data.&lt;br /&gt;
** Mini-batch: after a small sample of training cases. This is typically used when training big nets on big data sets.&lt;br /&gt;
* How much to update: (will be discussed further later)&lt;br /&gt;
** Use a fixed learning rate?&lt;br /&gt;
** Adapt the global learning rate?&lt;br /&gt;
** Adapt the learning rate on each connection esparately?&lt;br /&gt;
** Don&amp;#039;t use steepest descent?&lt;br /&gt;
&lt;br /&gt;
==== Generalization Issue (Overfitting) ====&lt;br /&gt;
&lt;br /&gt;
* The downside of using powerful models.&lt;br /&gt;
* The training data contains information about the regularities in the mapping from input to output. But it also contains two types of noise:&lt;br /&gt;
** The target values may be unreliable (usually only a minor worry).&lt;br /&gt;
** There is &amp;#039;&amp;#039;&amp;#039;sampling error&amp;#039;&amp;#039;&amp;#039;. There will be accidental regularities just because of the particular training cases that were chosen.&lt;br /&gt;
* When we fit the model, it cannot tell which regularities are real and which are caused by sampling error, so it fits both kinds of regularity. If the model is very flexible it can model the sampling error really well. &amp;#039;&amp;#039;This is a disaster&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== Ways to Reduce Overfitting ====&lt;br /&gt;
&lt;br /&gt;
* A large number of different methods have been developed:&lt;br /&gt;
** Weight-decay: keep weights small / zero.&lt;br /&gt;
** Weight-sharing: insist that many weights have the same value.&lt;br /&gt;
** Early stopping: Make a fake test set. As training the net, once the performance on the fake test set starts getting worse you stop training.&lt;br /&gt;
** Model averaging: Train many different neural nets and average them.&lt;br /&gt;
** Bayesian fitting of neural nets: really just a fancy form of model averaging.&lt;br /&gt;
** Dropout: Randomly omit a hidden unit.&lt;br /&gt;
** Generative pre-training: (Will be discussed towards the end of the course.)&lt;br /&gt;
&lt;br /&gt;
== Learning to Predict the Next Word ==&lt;br /&gt;
&lt;br /&gt;
=== Diversion into Cognitive Science ===&lt;br /&gt;
&lt;br /&gt;
There has been a long debate in cognitive science between two rival theories of what it means to have a &amp;#039;&amp;#039;concept&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* The feature theory: A concept is a set of semantic features&lt;br /&gt;
** Good for explaining similarities between concepts.&lt;br /&gt;
** It&amp;#039;s convenient -- a concept is a vector of feature activities.&lt;br /&gt;
* The structuralist theory: The meaning of a concept lies in its relationships to other concepts.&lt;br /&gt;
** So conceptual knowledge is best expressed as a relational graph.&lt;br /&gt;
** Minsky used the limitations of perceptrons as evidence against feature vectors and in favor of relational graph representations.&lt;br /&gt;
&lt;br /&gt;
Both sides are wrong.&lt;br /&gt;
&lt;br /&gt;
* These two theories need not be rivals. A neural net can use vectors of semantic features to implement a relational graph.&lt;br /&gt;
* We may use explicit rules for conscious, deliberate reasoning, but we do a lot of commonsense, analogical reasoning by just &amp;quot;seeing&amp;quot; the answer with no conscious intervening steps.&lt;br /&gt;
&lt;br /&gt;
==== Localist and Distributed Representations of Concepts ====&lt;br /&gt;
&lt;br /&gt;
The obvious way to implement a relational graph in a neural net is to treat a neuron as a node in the graph and a connection as a binary relationship. But this &amp;quot;localist&amp;quot; method will not work:&lt;br /&gt;
&lt;br /&gt;
* We need many different types of relationship and the connections in a neural net do not have discrete labels.&lt;br /&gt;
* We need ternary relationships as well as binary ones, e.g. A is between B and C&lt;br /&gt;
&lt;br /&gt;
The right way to implement relational knowledge in a neural net is still an open issue.&lt;br /&gt;
&lt;br /&gt;
* But many neurons are probably used for each concept and each neuron is probably involved in many concepts. This is called a &amp;quot;distributed representation&amp;quot;. It&amp;#039;s a many-to-many mapping between concepts and neurons.&lt;br /&gt;
&lt;br /&gt;
=== The Softmax Output Function (Another Diversion) ===&lt;br /&gt;
&lt;br /&gt;
The squared error measure has some drawbacks. Is there a different cost function that works better?&lt;br /&gt;
&lt;br /&gt;
Yes, force the outputs to represent a probability distribution across discrete alternatives.&lt;br /&gt;
&lt;br /&gt;
==== Softmax ====&lt;br /&gt;
&lt;br /&gt;
The output units in a softmax group uses a non-local non-linearity. Let $y_i$ be the output of a neuron in a softmax group, and $z_i$ (called &amp;#039;&amp;#039;logit&amp;#039;&amp;#039;) the input of the same neuron:&lt;br /&gt;
&lt;br /&gt;
$$y_i = \frac{e^{z_i}}{\sum_{j \in \text{group}} e^{z_j} }$$&lt;br /&gt;
&lt;br /&gt;
Note that $\sum y_i = 1$, so we force the $y_i$ to represent a probability distribution. We can show:&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial y_i}{\partial z_i} = y_i (1 - y_i)$$&lt;br /&gt;
&lt;br /&gt;
The right cost function to use with softmax is the negative log probability of the right answer. This is called the &amp;#039;&amp;#039;Cross Entropy&amp;#039;&amp;#039; cost function. ($t_j$ is the target value.)&lt;br /&gt;
&lt;br /&gt;
$$C = - \sum_{j} t_j \log y_j$$&lt;br /&gt;
&lt;br /&gt;
$C$ has a very big gradient when the target value is 1 and the output is almost zero.&lt;br /&gt;
* A value of 0.000001 is much better than 0.000000001 (one-in-a-million chance vs one-in-a-billion chance).&lt;br /&gt;
* The steepness of $dC/dy$ exactly balances the flatness of $dy/dz$.&lt;br /&gt;
&lt;br /&gt;
$$\frac{\partial C}{\partial z_i} = \sum_{j} \frac{\partial C}{\partial y_j} \frac{\partial y_j}{\partial z_i} = y_i - t_i$$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Neuro-Probabilistic Language Models ===&lt;br /&gt;
&lt;br /&gt;
* We cannot identify phonemes perfectly in noisy speech.&lt;br /&gt;
* People use their understanding of the meaning of the utterance to hear the right words.&lt;br /&gt;
** &amp;quot;We do this unconsciously when we wreck a nice beach&amp;quot;&lt;br /&gt;
** We are very good at it.&lt;br /&gt;
* This means speech recognizers have to know which words are likely to come next and which are not.&lt;br /&gt;
** Fortunately words can be predicted quite well without full understanding.&lt;br /&gt;
&lt;br /&gt;
==== The Standard &amp;quot;Trigram&amp;quot; Method ====&lt;br /&gt;
&lt;br /&gt;
* Take a huge amount of text and count the frequencies of all triples of words.&lt;br /&gt;
&lt;br /&gt;
* Use these frequencies to make bets on the relative probabilities of words given the previous two words.&lt;br /&gt;
&lt;br /&gt;
* Until very recently this was the state-of-the-art.&lt;br /&gt;
** We cannot use a much bigger context because there are too many possibilities to store and the counts would mostly be zero.&lt;br /&gt;
** We have to &amp;quot;back-off&amp;quot; to digrams when the count for a trigram is too small. The probability is not zero just because the count is zero!&lt;br /&gt;
&lt;br /&gt;
* A trigram model doesn&amp;#039;t understand the similarities between words.&lt;br /&gt;
** The sentence &amp;quot;The cat got squashed in the garden on friday&amp;quot; should help us predict words in the sentence &amp;quot;The dog got flattened in the yard on monday&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* To overcome this limitation, we need to use the semantic and syntactic features of previous words to predict the features of the next word.&lt;br /&gt;
** Using a feature representation also allows a context that contains many more previous words, e.g. 10.&lt;br /&gt;
&lt;br /&gt;
* Yoshua Bengio&amp;#039;s neural net for predicting the next word&lt;br /&gt;
&lt;br /&gt;
== Object Recognition ==&lt;br /&gt;
&lt;br /&gt;
=== Why Object Recognition is Difficult ===&lt;br /&gt;
&lt;br /&gt;
* Segmentation: Real scenes are cluttered with other objects.&lt;br /&gt;
* Lighting: The intensities of the pixels are determined as much by the lighting as by the objects.&lt;br /&gt;
* Deformation: Objects can deform in a variety of non-affine ways.&lt;br /&gt;
* Affordances: Object classes are things defined by how they are used.&lt;br /&gt;
* Viewpoint: Changes in viewpoint cause changes in images that standard learning methods cannot cope with.&lt;br /&gt;
&lt;br /&gt;
=== Achieving Viewpoint Invariance ===&lt;br /&gt;
&lt;br /&gt;
* Viewpoint invariance is one of the main difficulties in making computers perceive.&lt;br /&gt;
* Several Different approaches:&lt;br /&gt;
** Use redundant invariant features.&lt;br /&gt;
** Put a box around the object and use normalized pixels.&lt;br /&gt;
** Use replicated features with pooling. This is called &amp;#039;&amp;#039;convolutional neural nets&amp;#039;&amp;#039; (in later lectures).&lt;br /&gt;
** Use a hierarchy of parts that have explicit poses relative to the camera (in later lectures).&lt;br /&gt;
&lt;br /&gt;
==== Invariant Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* Extract a large, redundant set of features that are invariant under transformations.&lt;br /&gt;
** e.g. pair of roughly parallel lines with a red dot between them (this is what baby herring gulls use to know where to peck for food).&lt;br /&gt;
* With enough invariant features, there is only one way to assemble them into an object.&lt;br /&gt;
* But for recognition, we must avoid forming features from parts of different objects.&lt;br /&gt;
&lt;br /&gt;
==== Judicious Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* Put a box around the object and use it as a coordinate frame for a set of normalized pixels.&lt;br /&gt;
** This solves the dimension-hopping problem. If we choose the box correctly, the same part of an object always occurs on the same normalized pixels.&lt;br /&gt;
** The box can provide invariance to many degrees of freedom: translation, rotation, scale, shear, stretch, ...&lt;br /&gt;
&lt;br /&gt;
* But choosing the box is difficult because of:&lt;br /&gt;
** Segmentation errors, occlusion, unusual orientations.&lt;br /&gt;
&lt;br /&gt;
* We need to recognize the shape to get the box right!&lt;br /&gt;
&lt;br /&gt;
==== Brute Force Normalization Approach ====&lt;br /&gt;
&lt;br /&gt;
* When training the recognizer, use well-segmented, upright images to fit the correct box.&lt;br /&gt;
&lt;br /&gt;
* At test time try all possible boxes in a range of positions and scales.&lt;br /&gt;
&lt;br /&gt;
** This approach is widely used for detecting upright things like faces and house numbers in unsegmented images.&lt;br /&gt;
** It is much more efficient if the recognizer can cope with some variation in position and scale so that we can use a coarse grid when trying all possible boxes.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Digit Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== The Replicated Feature Approach ====&lt;br /&gt;
&lt;br /&gt;
* This is currently the dominant approach for neural networks.&lt;br /&gt;
&lt;br /&gt;
* Use many different copies of the same feature detector with different positions.&lt;br /&gt;
&lt;br /&gt;
** Could also replicate across scale and orientation but it is tricky and expensive.&lt;br /&gt;
** Replication greatly reduces the number of free parameters to be learned.&lt;br /&gt;
&lt;br /&gt;
* Use several different feature types, each with its own map of replicated detectors.&lt;br /&gt;
&lt;br /&gt;
==== Backpropagation with Weight Contraints ====&lt;br /&gt;
&lt;br /&gt;
* It&amp;#039;s easy to modify the backpropagation algorithm to incorporate linear constraints between the weights.&lt;br /&gt;
&lt;br /&gt;
* We compute the gradients as usual, and then modify the gradients so that they satisfy the constraints - so if the weights started off satisfying the constraints, they will continue to satisfy them.&lt;br /&gt;
&lt;br /&gt;
To constrain $w_1 = w_2$, we need $\Delta w_1 = \Delta w_2$.&lt;br /&gt;
&lt;br /&gt;
Compute $\partial E / \partial w_1$ and $\partial E / \partial w_2$, then use $\partial E / \partial w_1 + \partial E / \partial w_2$ for both $w_1$ and $w_2$.&lt;br /&gt;
&lt;br /&gt;
==== What Does Replicating the Feature Detectors Achieve? ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Equivariant&amp;#039;&amp;#039;&amp;#039; activities: Replicated features do &amp;#039;&amp;#039;not&amp;#039;&amp;#039; make the neural activities invariant to translation. The activities are equivariant.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Invariant&amp;#039;&amp;#039;&amp;#039; knowledge: If a feature is useful in some locations during training, detectors for that feature will be available in all locations during testing.&lt;br /&gt;
&lt;br /&gt;
==== Pooling the Outputs of Replicated Feature Detectors ====&lt;br /&gt;
&lt;br /&gt;
* Get a small amount of translational invariance at each level by averaging four neighboring replicated detectors to give a single output to the next level.&lt;br /&gt;
** This reduces the number of inputs to the next layer of feature extaction, thus allowing us to have many more different feature maps.&lt;br /&gt;
** Taking the maximum of the four works slightly better.&lt;br /&gt;
&lt;br /&gt;
* Problem: After several levels of pooling, we have lost information about the precise positions of things.&lt;br /&gt;
** This makes it impossible to use the precise spatial relationships between high-level parts for recognition.&lt;br /&gt;
&lt;br /&gt;
==== Le Net ====&lt;br /&gt;
&lt;br /&gt;
* Yann LeCun and his collaborators developed a really good recognizer for handwritten digits by using backpropagation in a feedforward net with:&lt;br /&gt;
** Many hidden layers.&lt;br /&gt;
** Many maps of replicated units in each layer.&lt;br /&gt;
** Pooling of the outputs of nearby replicated units.&lt;br /&gt;
** A wide net that can cope with several characters at once even if they overlap.&lt;br /&gt;
** A clever way of training a complete system, not just a recognizer.&lt;br /&gt;
&lt;br /&gt;
* This net was used for reading ~10% of the checks in North America.&lt;br /&gt;
&lt;br /&gt;
* Look the impressive demos of LENET at http://yann.lecun.com&lt;br /&gt;
&lt;br /&gt;
==== Priors and Prejudice ====&lt;br /&gt;
&lt;br /&gt;
* We can put our prior knowledge about the task into the network by designing appropriate:&lt;br /&gt;
** Connectivity&lt;br /&gt;
** Weight constraints&lt;br /&gt;
** Neuron activation functions&lt;br /&gt;
&lt;br /&gt;
* This is less intrusive than hand-designing the features&lt;br /&gt;
** But it still prejudices the network towards the particular way of solving the problem that we had in mind.&lt;br /&gt;
&lt;br /&gt;
* Alternatively, we can use our prior knowledge to create a whole lot more training data.&lt;br /&gt;
** This may require a lot of work (Hofman &amp;amp; Tresp, 1993). Read data + synthetic data.&lt;br /&gt;
** It may make learning take much longer.&lt;br /&gt;
** It allows optimization to discover clever ways of using the multi-layer network that we did not think of - and we may never fully understand how it does it.&lt;br /&gt;
&lt;br /&gt;
==== The Brute Force Approach ====&lt;br /&gt;
&lt;br /&gt;
* LeNet uses knowledge about the invariances to design:&lt;br /&gt;
** the local connectivity&lt;br /&gt;
** the weight-sharing&lt;br /&gt;
** the pooling&lt;br /&gt;
&lt;br /&gt;
* This achieves about 80 errors.&lt;br /&gt;
** This can be reduced to about 40 errors by using many different transformations of the input and other tricks (Ranzato 2008).&lt;br /&gt;
&lt;br /&gt;
* Ciresan et. al. (2010) inject knowledge of invariances by creating a huge amount of carefully designed extra training data:&lt;br /&gt;
** For each training image, they produce many new training examples by applying many different transformations.&lt;br /&gt;
** They can then train a large, deep, dumb net on a GPU without much overfitting.&lt;br /&gt;
** They achieved about 35 errors.&lt;br /&gt;
&lt;br /&gt;
* With model averaging they can now get about 25 errors (which is about the same as human error rate).&lt;br /&gt;
&lt;br /&gt;
==== How to Detect a Significant Drop in the Error Rate ====&lt;br /&gt;
&lt;br /&gt;
* Is 30 errors in 10,000 test cases significantly better than 40 errors?&lt;br /&gt;
** It all depends on the particular errors.&lt;br /&gt;
** The McNemar test uses the particular errors and can be much more powerful than a test that just uses the number of errors.&lt;br /&gt;
&lt;br /&gt;
=== Convolutional Nets for Object Recognition ===&lt;br /&gt;
&lt;br /&gt;
==== From Hand-Written Digits to 3D Objects ====&lt;br /&gt;
&lt;br /&gt;
* Recognizing real objects in color photographs downloaded from the web is much more complicated than recognizing hand-written digits:&lt;br /&gt;
&lt;br /&gt;
** Hundred times as many classes (1000 vs 10)&lt;br /&gt;
** Hundred times as many pixels (256x256 color vs 28x28 gray)&lt;br /&gt;
** Two dimensional image of three-dimensional scene.&lt;br /&gt;
** Cluttered scenes requiring segmentation.&lt;br /&gt;
** Multiple objects in each image.&lt;br /&gt;
&lt;br /&gt;
* Will the same type of convolutional neural network work?&lt;br /&gt;
&lt;br /&gt;
==== The ILSVRC-2012 Competition on ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* The dataset has 1.2 million high-resolution training images.&lt;br /&gt;
&lt;br /&gt;
* The classification task:&lt;br /&gt;
** Get the &amp;quot;correct&amp;quot; class in your top 5 bets. There are 1000 classes.&lt;br /&gt;
&lt;br /&gt;
* The localization task:&lt;br /&gt;
** For each bet, put a box around the object. Your box must have at least 50% overlap with the correct box.&lt;br /&gt;
&lt;br /&gt;
* Some of the best existing computer vision methods were tried on this dataset by leading computer vision groups from Oxford, INRIA, XRCE, ...&lt;br /&gt;
** Computer vision systems use complicated multi-stage systems.&lt;br /&gt;
** The early stages are typically hand-tuned by optimizing a few parameters.&lt;br /&gt;
&lt;br /&gt;
==== Error Rates on the ILSVRC-2012 Competition ====&lt;br /&gt;
&lt;br /&gt;
* University of Tokyo: 26.1% (classification)&lt;br /&gt;
* Oxford University Computer Vision Group: 26.9% (classification)&lt;br /&gt;
* INRIA(French national research institute in CS) + XRCE(Xerox Research Center Europe): 27.0% (classification)&lt;br /&gt;
* University of Amsterdam: 29.5% (classification)&lt;br /&gt;
* University of Toronto (&amp;#039;&amp;#039;&amp;#039;Alex Krizhevsky&amp;#039;&amp;#039;&amp;#039;): &amp;#039;&amp;#039;&amp;#039;16.4%&amp;#039;&amp;#039;&amp;#039; (classification)&lt;br /&gt;
&lt;br /&gt;
==== A Neural Network for ImageNet ====&lt;br /&gt;
&lt;br /&gt;
* Alex Krizhevsky (NIPS 2012) developed a very deep convolutional neural net of the type pioneered by Yann LeCun. Its &amp;#039;&amp;#039;architecture&amp;#039;&amp;#039; was:&lt;br /&gt;
** 7 hidden layers not counting some max pooling layers.&lt;br /&gt;
** The early layers were convolutional.&lt;br /&gt;
** The last two layers were globally connected.&lt;br /&gt;
&lt;br /&gt;
* The &amp;#039;&amp;#039;activation functions&amp;#039;&amp;#039; were:&lt;br /&gt;
** Rectified linear units in every hidden layer. These train much faster and are more expressive than logistic units.&lt;br /&gt;
** Competitive normalization to suppress hidden activities when nearby units have stronger activities. This helps with variations in intensity.&lt;br /&gt;
&lt;br /&gt;
==== Tricks that Significantly Improve Generalization ====&lt;br /&gt;
&lt;br /&gt;
* Train on random 224x224 patches from the 256x256 images to get more data. Also use left-right reflections of the images.&lt;br /&gt;
** At test time, combine the opinions from ten different patches: The four 224x224 corner patches plus the central 224x224 patch plus the reflections of those five patches.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;dropout&amp;quot; to regularize the weights in the globally connected layers (which contain most of the parameters).&lt;br /&gt;
** Dropout means that half of the hidden units in a layer are randomly removed for each training example.&lt;br /&gt;
** This stops hidden units from relying too much on other hidden units.&lt;br /&gt;
&lt;br /&gt;
==== The Hardward Required for Alex Krizhevsky&amp;#039;s Net ====&lt;br /&gt;
&lt;br /&gt;
* He uses a very efficient implementation of convolutional nets on two Nvidia GTX 580 Graphics Processor Units (over 1000 fast little cores)&lt;br /&gt;
** GPUs are very good for matrix-matrix multiplies.&lt;br /&gt;
** GPUs have very high bandwidth to memory.&lt;br /&gt;
** This allows him to train the network in a week.&lt;br /&gt;
** It also makes it quick to combine results from 10 patches at test time.&lt;br /&gt;
&lt;br /&gt;
* We can spread a network over many cores if we can communicate the states fast enough.&lt;br /&gt;
&lt;br /&gt;
* As cores get cheaper and datasets get bigger, big neural nets will improve faster than old-fashioned (i.e. pre Oct 2012) computer vision systems.&lt;br /&gt;
&lt;br /&gt;
==== Finding Roads in High-Resolution Images ====&lt;br /&gt;
&lt;br /&gt;
* Vlad Mnih (ICML 2012) used a non-convolutional net with local fields and multiple layers of rectified linear units to find roads in cluttered aerial images.&lt;br /&gt;
** It takes a large image patch and predicts a binary road label for the central 16x16 pixels.&lt;br /&gt;
** There is lots of labeled training data available for this task.&lt;br /&gt;
&lt;br /&gt;
* The task is hard for many reasons:&lt;br /&gt;
** Occlusion by buildings, trees, and cars.&lt;br /&gt;
** Shadows, Lighting changes.&lt;br /&gt;
** Minoro viewpoint changes.&lt;br /&gt;
&lt;br /&gt;
* The worst problems are incorrect labels:&lt;br /&gt;
** Badly registered maps&lt;br /&gt;
** Arbitrary decisions about what counts as a road (vs laneway etc.)&lt;br /&gt;
&lt;br /&gt;
== Mini-Batch Gradient Descent ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
* The Error Surface: Lies in a space with a horizontal axis for each weight and one vertical axis for the error.&lt;br /&gt;
** For a linear neuron with a squared error, it is a quadratic bowl where vertical cross-sections are parabolas and horizontal cross-sections are ellipses.&lt;br /&gt;
&lt;br /&gt;
* For multi-layer, non-linear nets the error surface is much more complicated. But locally, a piece of a quadratic bowl is usually a very good approximation.&lt;br /&gt;
&lt;br /&gt;
* Going downhill reduces the error, but the direction of steepest descent does not point at the minimum unless the ellipse is a circle.&lt;br /&gt;
** The gradient is big in the direction in which we only want to travel a small distance, small in the direction in which we want to travel a large distance.&lt;br /&gt;
&lt;br /&gt;
* If the learning rate is big, the weights slosh to and fro across the ravine. If the learning rate is too big, this oscillation diverges.&lt;br /&gt;
&lt;br /&gt;
* What we would like to achieve: move quickly in directions with small but consistent gradients, and move slowly in directions with big but inconsistent gradients.&lt;br /&gt;
&lt;br /&gt;
==== Stochastic Gradient Descent ====&lt;br /&gt;
&lt;br /&gt;
* If the dataset is highly redundant, the gradient on the first half is almost identical to the gradient on the second half.&lt;br /&gt;
** So, instead of computing the full gradient, update the weights using the gradient on the first half and then get a gradient for the new weights on the second half.&lt;br /&gt;
** The extreme version of this approach updates weights after each case. It&amp;#039;s called &amp;quot;online&amp;quot; learning.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches are usually better than online.&lt;br /&gt;
** Less computation is used updating the weights.&lt;br /&gt;
** Computing the gradient for many cases simultaneously uses matrix-matrix multiplies which are very efficient, especially on GPUs.&lt;br /&gt;
&lt;br /&gt;
* Mini-batches need to be balanced for classes (one way to approximate this is to pick points randomly).&lt;br /&gt;
&lt;br /&gt;
==== Two types of learning algorithm ====&lt;br /&gt;
&lt;br /&gt;
* If we use the full gradient computed from all the training cases, there are many clever ways to speed up learning (e.g. non-linear conjugate gradient).&lt;br /&gt;
&lt;br /&gt;
* For large neural networks with very large and highly redundant training sets, it is nearly always best to use mini-batch learning.&lt;br /&gt;
&lt;br /&gt;
==== Basic Mini-Batch Gradient Descent Algorithm ====&lt;br /&gt;
&lt;br /&gt;
* Guess an initial learning rate.&lt;br /&gt;
** If the error keeps getting worse or oscillates wildly, reduce the learning rate.&lt;br /&gt;
** If the error is falling fairly consistently but slowly, increase the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Write a simple program to automate this way of adjusting the learning rate.&lt;br /&gt;
&lt;br /&gt;
* Toward the end of mini-batch learning, it nearly always helps to turn down the learning rate.&lt;br /&gt;
** This removes fluctuations in the final weights caused by the variations between mini-batches.&lt;br /&gt;
&lt;br /&gt;
* Turn down the learning rate when the error stops decreasing.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&amp;#039;: Compute the error in a separate validation set.&lt;br /&gt;
&lt;br /&gt;
=== Tricks for Mini-Batch Gradient Descent ===&lt;br /&gt;
&lt;br /&gt;
==== Initializing The Weights ====&lt;br /&gt;
&lt;br /&gt;
* If two hidden units have exactly the same bias and exactly the same incoming and outgoing weights, they will always get exactly the same gradient.&lt;br /&gt;
&lt;br /&gt;
** So they can never learn to be different features.&lt;br /&gt;
** We break symmetry by initializing the weights to have small random values.&lt;br /&gt;
&lt;br /&gt;
* If a hidden unit has a big fan-in, small changes on many of its incoming weights can cause the learning to overshoot.&lt;br /&gt;
** We generally want smaller incoming weights when the fan-in is big, so initialize the weights to be proportional to $\sqrt{\text{fan-in}}$.&lt;br /&gt;
&lt;br /&gt;
* We can also scale the learning rate the same way.&lt;br /&gt;
&lt;br /&gt;
==== Shifting the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, shifting the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that it has zero mean over the whole training set.&lt;br /&gt;
&lt;br /&gt;
* The hyperbolic tangent (which is $2\times \text{logistic} - 1$) produces hidden activations that are roughly zero mean. &lt;br /&gt;
** In this respect it&amp;#039;s better than the logistic.&lt;br /&gt;
&lt;br /&gt;
==== Scaling the Inputs ====&lt;br /&gt;
&lt;br /&gt;
* When using steepest descent, scaling the input values makes a big difference.&lt;br /&gt;
** It usually helps to transform each component of the input vector so that is has unit variance over the whole training set.&lt;br /&gt;
&lt;br /&gt;
==== A More Thorough Method: Decorrelate the Input Components ====&lt;br /&gt;
&lt;br /&gt;
* For a linear neuron, we get a big win by decorrelating each component of the input from the other input components.&lt;br /&gt;
&lt;br /&gt;
* There are several different ways to decorrelate inputs. A reasonable method is to use Principal Components Analysis.&lt;br /&gt;
** Drop the principal components with the smallest eigenvalues ― &amp;#039;&amp;#039;&amp;#039;This achieves some dimensionality reduction&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
** Divide the remaining principal components by the square roots of their eigenvalues. For a linear neuron, this converts an axis aligned elliptical error surface into a circular one.&lt;br /&gt;
&lt;br /&gt;
* For a circular error surface, the gradient points straight towards the minimum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Common Problems That Occur in Multilayer Networks ====&lt;br /&gt;
&lt;br /&gt;
* If we start with a very big learning rate, the weights of each hidden unit will all become very big and positive or very big and negative.&lt;br /&gt;
** The error derivatives for the hidden units will all become tiny and the error will not decrease.&lt;br /&gt;
** This is usually a plateau, but people often mistake it for a local minimum.&lt;br /&gt;
&lt;br /&gt;
* In classification networks that use a squared error or a cross-entropy error, the best guessing strategy is to make each output unit always produce an output equal to the proportion of time it should be a 1.&lt;br /&gt;
** The network find this strategy quickly and may take a long time to improve on it by making use of the input.&lt;br /&gt;
** This is another plateau that looks like a local minimum.&lt;br /&gt;
&lt;br /&gt;
==== Be Careful about Turning Down the Learning Rate ====&lt;br /&gt;
&lt;br /&gt;
* Turning down the learning rate reduces the random fluctuations in the error due to the different gradients on different mini-batches.&lt;br /&gt;
** So we get a quick win&lt;br /&gt;
** But then we get slower learning.&lt;br /&gt;
&lt;br /&gt;
* Don&amp;#039;t turn down the learning rate too soon!&lt;br /&gt;
&lt;br /&gt;
==== Four Ways to Speed up Mini-Batch Learning ====&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;momentum&amp;quot;&lt;br /&gt;
** Instead of using the gradient to change the &amp;#039;&amp;#039;position&amp;#039;&amp;#039; of the weight &amp;quot;particle, use it to change the &amp;#039;&amp;#039;velocity&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* Use separate adaptive learning rates for each parameter.&lt;br /&gt;
** Slowly adjust the rate using the consistency of the gradient for that parameter.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;rmsprop&amp;#039;&amp;#039;&amp;#039;: Divide the learning rate for a weight by a running average of the magnitudes of recent gradients for that weight. &lt;br /&gt;
** This is the mini-batch version of just using the sign of the gradient.&lt;br /&gt;
&lt;br /&gt;
* Take a fancy method from the optimization literature that makes use of curvature information (not this lecture)&lt;br /&gt;
** Adapt it to work for neural nets.&lt;br /&gt;
** Adapt it to work for mini-batches.&lt;br /&gt;
&lt;br /&gt;
=== The Momentum Method ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
Imagine a ball on the error surface. The location of the ball in the horizontal plane represents the weight vector.&lt;br /&gt;
# The ball starts off by following the gradient, but once it has velocity, it no longer does steepest descent.&lt;br /&gt;
# Its momentum makes it keep going in the previous direction.&lt;br /&gt;
&lt;br /&gt;
* It damps oscillations in directions of high curvature by combining gradients with opposite signs.&lt;br /&gt;
&lt;br /&gt;
* It builds up speed in directions with a gentle but consistent gradient.&lt;br /&gt;
&lt;br /&gt;
==== Equations ====&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(t) = \alpha \mathbb{v}(t-1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The effect of the gradient is to increment the previous velocity. The velocity also decays by $\alpha$ which is slightly less then 1.&lt;br /&gt;
&lt;br /&gt;
The weight change is equal to the current velocity.&lt;br /&gt;
&lt;br /&gt;
$$\Delta \mathbb{w}(t) = \mathbb{v} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \mathbb{v} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
$$ = \alpha \Delta \mathbb{w} (t - 1) - \epsilon \frac{\partial E}{\partial \mathbb{w}} (t)$$&lt;br /&gt;
&lt;br /&gt;
The weight change can be expressed in terms of the previous weight change and the current gradient.&lt;br /&gt;
&lt;br /&gt;
==== Behavior ====&lt;br /&gt;
&lt;br /&gt;
* If the error surface is a tilted plane, the ball reaches a terminal velocity $\mathbb{v}(\infty)$.&lt;br /&gt;
** If the momentum is close to 1, this is much faster than simple gradient descent.&lt;br /&gt;
&lt;br /&gt;
$$\mathbb{v}(\infty) = \frac{1}{1 - \alpha} \Big( - \epsilon \frac{\partial E}{\partial \mathbb{w}} \Big)$$&lt;br /&gt;
&lt;br /&gt;
* At the beginning of learning there may be very large gradients.&lt;br /&gt;
** So it pays to use a small momentum (e.g. 0.5).&lt;br /&gt;
** Once the large gradients have disappeared and the weights are stuck in a ravine the momentum can be smoothly raised to its final value (e.g. 0.9 or even 0.99)&lt;br /&gt;
&lt;br /&gt;
* This allows us to learn at a rate that would cause divergent oscillations without the momentum.&lt;br /&gt;
&lt;br /&gt;
==== Better Type of Momentum (Nesterov 1983) ====&lt;br /&gt;
&lt;br /&gt;
* The standard momentum method &amp;#039;&amp;#039;first&amp;#039;&amp;#039; computes the gradient at the current location and &amp;#039;&amp;#039;then&amp;#039;&amp;#039; takes a big jump in the direction of the updated accumulated gradient.&lt;br /&gt;
* Ilya Sutskever (2012 unpublished) suggested a new form of momentum that often works better.&lt;br /&gt;
** Inspired by the Nesterov method for optimizing convex functions.&lt;br /&gt;
* &amp;#039;&amp;#039;First&amp;#039;&amp;#039; make a big jump in the direction of the previous accumulated gradient.&lt;br /&gt;
* &amp;#039;&amp;#039;Then&amp;#039;&amp;#039; measure the gradient where you end up and make a correction.&lt;br /&gt;
** It&amp;#039;s better to correct a mistake &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you have made it!&lt;br /&gt;
&lt;br /&gt;
=== Adaptive Learning Rates for Each Connection ===&lt;br /&gt;
&lt;br /&gt;
==== Intuition ====&lt;br /&gt;
&lt;br /&gt;
* In a multilayer net, the appropriate learning rates can vary widely between weights:&lt;br /&gt;
** The magnitudes of the gradients are often very different for different layers, especially if the initial weights are small.&lt;br /&gt;
** The fan-in of a unit determines the size of the &amp;quot;overshoot&amp;quot; effects caused by simultaneously changing many of the incoming weights of a unit to correct the same error.&lt;br /&gt;
&lt;br /&gt;
* So user a global learning rate (set by hand) multiplied by an appropriate local gain that is determined empirically for each weight.&lt;br /&gt;
&lt;br /&gt;
==== One Way to Determine the Individual Learning Rates ====&lt;br /&gt;
&lt;br /&gt;
$$\Delta w_{ij} = - \epsilon g_{ij} \frac{\partial E}{\partial w_{ij}}$$&lt;br /&gt;
&lt;br /&gt;
* Start with a local gain of 1 for every weight. i.e. $g_{ij}(0) = 1$&lt;br /&gt;
* Increase the local gain if the gradient for that weight does not change sign.&lt;br /&gt;
* Use small additive increases and multiplicative decreases.&lt;br /&gt;
** This ensures that big gains decay rapidly when oscillations start.&lt;br /&gt;
** If the gradient is totally random, the gain will hover around 1 when we increase by &amp;#039;&amp;#039;plus&amp;#039;&amp;#039; $\delta$ half the time and decrease by &amp;#039;&amp;#039;times&amp;#039;&amp;#039; $1 - \delta$ half the time.&lt;br /&gt;
&lt;br /&gt;
$$\text{if } \Big( \frac{\partial E}{\partial w_{ij}}(t) \cdot \frac{\partial E}{\partial w_{ij}}(t-1) \Big) &amp;gt; 0$$&lt;br /&gt;
$$\text{then } g_{ij}(t) = g_{ij}(t - 1) + 0.05$$&lt;br /&gt;
$$\text{else } g_{ij}(t) = g_{ij}(t - 1) * 0.95$$&lt;br /&gt;
&lt;br /&gt;
==== Tricks for Making Adaptive Learning Rates Work Better ====&lt;br /&gt;
&lt;br /&gt;
* Limit the gains to lie in some reasonable range, e.g. [0.1, 10] or [0.01, 100].&lt;br /&gt;
&lt;br /&gt;
* Use full batch learning or very big mini-batches.&lt;br /&gt;
** This ensures that changes in the sign of the gradient are not mainly due to the sampling error of a mini batch.&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates can be combined with momentum.&lt;br /&gt;
** Use the agreement in sign between the current gradient for a weight and the velocity for that weight (Jacobs, 1989).&lt;br /&gt;
&lt;br /&gt;
* Adaptive learning rates only deal with axis-aligned effects.&lt;br /&gt;
** Momentum does not care about the alignment of the axes.&lt;br /&gt;
&lt;br /&gt;
=== RMSPROP: Divide The Gradient By Running Average of Its Recent Magnitude ===&lt;/div&gt;</summary>
		<author><name>Tedyun</name></author>
	</entry>
</feed>