text:
Is there any scientific/mathematical argument that prevents deep learning from ever producing strong AI?
I read Judea Pearl's The Book of Why, in which he mentions that deep learning is just a glorified curve fitting technology, and will not be able to produce human-like intelligence.
From his book there is this diagram that illustrates the three levels of cognitive abilities:

The idea is that the "intelligence" produced by current deep learning technology is only at the level of association. Thus the AI is nowhere near the level of asking questions like "how can I make Y happen" (intervention) and "What if I have acted differently, will X still occur?" (counterfactuals), and it's highly unlikely that curve fitting techniques can ever bring us closer to a higher level of cognitive ability.
I found his argument persuasive on an intuitive level, but I'm unable to find any physical or mathematical laws that can either bolster or cast doubt on this argument.
So, is there any scientific/physical/chemical/biological/mathematical argument that prevents deep learning from ever producing strong AI (human-like intelligence)?

One of the problems faced in answering this is, is that "Deep Learning" is a kind of brand name, where things done with neural networks that go beyond statistical curve fitting - e.g. RNNs for learning sequences, and "deep reinforcement learning" - may also be considered part of it by adherents. If you allow for the term to evolve like this, it is very hard to nail down any argument about its capabilities.

godel's incompleteness theorem

@thecomplexitytheorist: Godel's incompleteness, entscheidungsproblem and similars , all they aply also to human mind. As conclusion, if they was a reason to do not reach AI, then neither humans are intelligent. Modus tollens, Godels is not a problem in the path to AGI

Who is to say that 'Doing' and 'Imagining' are also not simply 'Curve-Fitting' going on in the brain?

Judea Pearl's 2018 comment on ACM.org, in his To, Build Truly Intelligent Machines, Teach Them Cause and Effect is piercing truth.

All the impressive achievements of deep learning amount to just curve fitting.

It may be less sensational and more technically correct to state that it is not, "Just curve fitting," but rather, "sophisticated surface fitting." Nonetheless, his general assessment indicates the need to look beyond tuning nonlinear functions to fit a surface in $\mathbb{R}^n$ and consider whether cognition is achievable with a deep network. The split in answers to this question is odd. We have two conflicting assertions, often strongly stated.

Artificial networks cannot perform logic.
Artificial networks are the best approach to AI.

How can rationality be excluded from the list of important human features of intelligence, which is what these two assertions are taken together would mean?
Is the human brain a network of sophisticated curve fitters?  Marvin Minsky's famous quote, "The brain happens to be a meat machine," was offered without proof, and neither a proof of his trivialization of the human brain nor a proof that the brain is beyond the reach of Turing computability has been offered since.
When you read these words, are your neural networks doing the following sequence of curve fits?

Edges from retinal rods and cones
Lines from edges
Shapes from lines
Letters from shapes
Linguistic elements from groups of letters
Linguistic structures from elements
Understanding from linguistic structures

The case is strong for the affirmation that the first five is a convergence mechanism on a model, and all the machine learning structure is just a method to fit the data to the model.
Those last two bullet items are where the paradigm breaks down and where many AI researchers and authors have correctly stated that machine learning has significant limitations when based solely on layers of multi-layer perceptrons and convolution kernels.  Furthermore, the last bullet item is grossly oversimplified in its current state, probably by orders of magnitude.  Even if Minsky is correct that a computer can perform what the brain does, the process of reading and understanding this paragraph could easily have a thousand different kinds of unique process components in patterns of internal workflow with massive parallelism.  Imaging technology indicates this probability.  We have computers modelling only the simplest peripheral layers.

Is there any scientific/mathematical argument that prevents deep learning from ever producing strong AI? — No. But there is no such argument that guarantees it either.

Other questions here investigate whether these sophisticated curve fitters can perform elements of cognition or reasoning.

Could a neural network detect primes?
Can neural networks be used to prove conjectures?

The totem of three in the question's image, seeing, doing, and imagining, is not particularly complete, accurate, or insightful.

There are at least five sensory paradigms in humans, not one
Doing preceded human senses by billions of years — bacteria do
Imagining is not a significantly higher process than scenario replay from models of past experience with some method to apply set functions to combine them and inject random mutations
Creativity may just be imagining in the previous bullet item followed by weeding out useless imagination results with some market-oriented quality criteria, leaving the impressive creative products that sell

The higher forms are appreciation, a sense of realities beyond the scope of scientific measurement, legitimate doubt, love, sacrifice for the good of others or humanity.
Many recognize that the current state of AI technology is nowhere near the procurement of a system that can reliably answer, "How can I make Y happen?" or "If I have acted differently, will X still occur?"
There is no mathematical proof that some combination of small curve fitting elements can or cannot achieve the ability to answer those questions as well a typical human being can, mostly because there is insufficient understanding of what intelligence is or how to define it in mathematical terms.
It is also possible that human intelligence doesn't exist at all, that references to it are based on a religious belief that we are higher as a species than other species.  That we can populate, consume, and exterminate is not actually a very intelligent conception of intelligence.
The claim that human intelligence is an adaptation that differentiates us from other mammals conflicts with whether we adapt well.  We have not been tested.  Come the next meteoric global killer with a shock wave of the magnitude of that of the Chicxulub crater's meteor, followed by a few and a thousand years of solar winter and we'll see whether it is our 160,000-year existence or bacteria's 4,000,000,000 year existence that proves more sustainable.  In the timeline of life, human intelligence has yet to prove itself significant as an adaptive trait.
What is clear about AI development is that other kinds of systems are playing a role along with deep learners based on the multi-layer perceptron concept and convolution kernels which are strictly surface fitters.
Q-learning components, attention-based components, and long-short term memory components are all strictly a surface fitter too, but only by stretching the definition of surface fitting considerably.  They have real-time adaptive properties and state, so they can be Turing complete.
Fuzzy logic containers, rules-based systems, algorithms with Markovian properties, and many other component types also play their role and are not surface fitters at all.
In summary, there are points made that have a basis in more than plausibility or a pleasing intuitive quality, however, many of these authors do not provide a mathematical framework with definitions, applications, lemmas, theorems, proofs, or even thought experiments that can be scrutinized in a formal way.

It is a paradox, but a deep learning machine (defined as a NeuralNet variant) is unable to learn anything. It is a flexible and configurable hardware/software architecture that can be parametrized to solve a lot of problems. But the optimal parameters to solve a problem are obtained by an external system, i.e. back-propagation algorithm.
Back-propagation subsystem uses conventional programming paradigms, it is not a Neural Net. This fact is in absolute opposition to human mind, where learning and use of knowledge is done by the same system (the mind).
If all the real interesting things are done outside the NN, it is difficult to claim that a NN (in any variant) can develop in an AGI.
It is also possible to find some more differences. Neural nets are strongly numerical in its interface and internals. From this point of view, they are an evolution of support vector machines.
Too much differences and restrictions to expect an AGI.
Note: I strongly disagree in the draw included in the original question. "Seeing", "doing", "imaging" are levels absolutely wrong. It ignores from basic and common software concepts as "abstraction" or "program state" (of mind, in Turing words); applied AI ones as "foresee"; and AGI ones as "free will", "objectives and feelings", ...

I think removing back-propagation (or any part of the training framework) from consideration, and claiming that the remaining part is the "Deep Learning" part is artificial, and kind of dodging the question. I think it is reasonable to assume that OP means Deep Learning as it is practiced, including the training processes available.

@NeilSlater: If we say a DL is a kind of NeuralNet ( in order to remark the similarity with the human mind and, as consequence, its possible power to reach an AGI) , we are excluding the learning part, that is not a NN. If we include the learning subsystem in the definition of a DL, then it is not a NN, it is only conventional programming, with the power of any conventional program, and has the same posibilities to reach AGI than any other program system or paradigm.

Human brains learn by receiving and processing input from external 'systems' exclusively. The optimal parameters to solve problems are obtained via trial and error, applying rules and processing input from external systems. Training starts while the baby is still in the uterus and continues 24/7 thereafter. The current state of AI is almost certainly not comparable to emulating the human brain; but claiming that AI can't learn (or isn't already learning in a similar way to the human brain) assumes knowledge of how the human brain 'learns' and functions that science doesn't know yet.

This doesn't make a lot of sense once you think about what "learning" is. Human brains also learn by adjusting connection weights in fixed hardware. So why aren't they disqualified? (Even when new connections are formed, that's just an update of a weight that was previously 0)


text:
What are the state-of-the-art approaches for detecting the most important "visual attention" area of an image?
I'm trying to detect the visual attention area in a given image and crop the image into that area. For instance, given an image of any size and a rectangle of say $L \times W$ dimension as an input, I would like to crop the image to the most important visual attention area.
What are the state-of-the-art approaches for doing that?
(By the way, do you know of any tools to implement that? Any piece of code or algorithm would really help.)
BTW, within a "single" object, I would like to get attention. So object detection might not be the best thing. I am looking for any approach, provided it's SOTA, but Deep Learning might be a better choice.

You can search for the following paper titles:

A Deep Multi-Level Network for Saliency Prediction.
Beyond Universal Saliency: Personalized Saliency Prediction with Multi-task CNN.

You can code in python using Pytorch framework.

To get a computer to detect and provide the bounding box or circle around a visual attention area in an image, the basis for attention must be determined.  Then the method of getting the computer system to make choices based on that basis can be selected.  First things first.
Is it a face or body or game character that is to be the object of interest?  Will it be the most dynamic object in the frame in terms of movement?  If it is a person, is it always the same person?  In either case, will their face be exposed to the angle of the camera?  Are there only still shots, or will the images be frames in a movie?
Once you know how YOU would distinguish the object requiring attention from other objects and background, then you can begin to see how a computer might simulate that recognition.  When training a deep network that involves convolution kernels (called a CNN or convolutional neural network) and possibly long-short term memory cells (LSTM), there are stages to the recognition.
Usually edges of things are detected first.  In movies, the movement of edges are tracked as features of the image.  Elements in the image that identify what kind of object the objects are is second.  For instance a toy might be detected by the way plastic reflects light and the color types and shapes common to toys.  A face might be first recognize by identifying eyes, nose, mouth, chin, and ears.
After parts are identified, then entire objects can be identified through another stage of feature extraction.  Vision systems follow the same basic principles of recognition that our human visual system uses.
There are many frameworks and libraries to help with these tasks, but to use them, it is important to get a general picture of the process and to clarify what it is that will sets the objects of importance out from other objects that may be similar or completely different so that attention can be focused the way you want.
Once you have $(h_{min}, v_{min}); (h_{max}, v_{max})$, the coordinates of the two corners of your cropping operation, which would be the goal of your network training, then any image manipulation library could handle the crop.
That's the state of the art.  There is no high level SDK that allows one to command the computer to find the most important item in the frame without any clarification of what is meant by that and training operations to teach the software to find what you've decided to be important based on some criteria.  Not yet anyway.

"Attention" in neural network (visual) is the area of the image where the network can find most number of features to classify it with high confidence.Based on your description you are talking about "soft attention".
Do we have any tools or SDK to implement that? i don't think there are readymade SDKs available. It is much better to train a model on your dataset with attention. Once you have your base model ready , it is easy to add attention mechanism for it.I suggest you to check https://arxiv.org/pdf/1502.03044.pdf.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
Is artificial intelligence vulnerable to hacking?
The paper The Limitations of Deep Learning in Adversarial Settings explores how neural networks might be corrupted by an attacker who can manipulate the data set that the neural network trains with. The authors experiment with a neural network meant to read handwritten digits, undermining its reading ability by distorting the samples of handwritten digits that the neural network is trained with.
I'm concerned that malicious actors might try hacking AI. For example

Fooling autonomous vehicles to misinterpret stop signs vs. speed limit.
Bypassing facial recognition, such as the ones for ATM.
Bypassing spam filters.
Fooling sentiment analysis of movie reviews, hotels, etc.
Bypassing anomaly detection engines.
Faking voice commands.
Misclassifying machine learning based-medical predictions.

What adversarial effect could disrupt the world? How we can prevent it?

Consider that human intelligence is vulnerable to hacking

Interesting. Are you interested in "adversarial settings risk models" or something closer to a traditional cyber-security answer but still squarely about A.I.? Best wishes.

It's not clear what you're really asking here, to be honest. You're asking too many questions or none, and that's why I've read below many different answers. This type of post is not good for Stack Exchange. We prefer more specific questions. What is your main specific question here? You're listing many possible ways to attack AI systems and then you ask "Are AI systems vulnerable to hacking?". This doesn't make any sense. What makes even less sense, because not really the same question, is the question "What adversarial effect could disrupt the world?".

This post is "interesting", but I closed it because it's unclear what type of answer you're looking for and it seems that you're asking many questions. There seem to be 3 distinct questions here. 1. The one in the title "Is artificial intelligence vulnerable to hacking?", 2. "What adversarial effect could disrupt the world?" and 3. "How we can prevent it?". It seems that you're proposing ways in which AI systems could be hacked, so your question in the title is unclear. Are you looking for a "yes" or "no" answer?

Do you want us to confirm that AI systems can be hacked in the way you suggest? Again, yes or no answer? The 2nd question is even more problematic. What do you mean by "disrupt the world" and "adversarial effect"? Maybe you meant "adversarial attack" rather than "adversarial effect"? Even assuming that's the case, it's not clear what you mean by "disrupt the world". It could mean many things. The 3rd question may be ok, if you clarify the second question. I would suggest that you edit your post to clarify what your question really is.

AI is vulnerable from two security perspectives the way I see it:

The classic method of exploiting outright programmatic errors to achieve some sort of code execution on the machine that is running the AI or to extract data.
Trickery through the equivalent of AI optical illusions for the particular form of data that the system is designed to deal with.

The first has to be mitigated in the same way as any other software. I'm uncertain if AI is any more vulnerable on this front than other software, I'd be inclined to think that the complexity maybe slightly heightens the risk.
The second is probably best mitigated by both the careful refinement of the system as noted in some of the other answers, but also by making the system more context-sensitive; many adversarial techniques rely on the input being assessed in a vacuum.

The split between code vulnerabilities and usage vulnerabilities is good. However, the code vulnerabilities typically are minuscule in AI. The complexity of AI lies in the data, whether that's node weights in a neural network or trees in a random forest. There's just a small bit of code to feed the AI, and the chief risk there is not overfeeding it - a classic buffer overflow risk, easily mitigated by late 20th century techniques.

@MSalters I think it is hard to draw a general conclusion because the code complexity can vary a lot between different types of AI agents (I think your comment is largely accurate for neural networks). Furthermore, although the data and manipulation thereof is probably the larger attack surface it would be unwise to discount the same sort of attacks that have allowed remote code execution via compromised image files in the past that exploited flaws in image viewing applications. The vector is the data being passed in, but the behavior still falls under the code vulnerability header, I think.

Programmer vs Programmer
It's a "infinity war": Programmers vs Programmers. All thing can be hackable. Prevention is linked to the level of knowledge of the professional in charge of security and programmers in application security.
eg There are several ways to identify a user trying to mess up the metrics generated by Sentiment Analysis, but there are ways to circumvent those steps as well. It's a pretty boring fight.
Agent vs Agent
An interesting point that @DukeZhou raised is the evolution of this war, involving two artificial intelligence (agents). In that case, the battle is one of the most knowledgeable. Which is the best-trained model, you know?
However, to achieve perfection in the issue of vulnerability, artificial intelligence or artificial super intelligence surpass the ability to circumvent the human. It is as if the knowledge of all hacks to this day already existed in the mind of this agent and he began to develop new ways of circumventing his own system and developing protection. Complex, right?
I believe it's hard to have an AI who thinks: "Will the human going to use a photo instead of putting his face to be identified?"
How we can prevent it
Always having a human supervising the machine, and yet it will not be 100% effective. This disregarding the possibility that an agent can improve his own model alone.
Conclusion
So I think the scenario works this way: a programmer tries to circumvent the validations of an AI and the IA developer acquiring knowledge through logs and tests tries to build a smarter and safer model trying to reduce the chances of failure.

How we can prevent it?

There are several works about AI verification. Automatic verifiers can prove the robustness properties of neural networks. It means that if the input X of the NN is perturbed not more that on a given limit ε (in some metric, e.g. L2), then the NN gives the same answer on it.
Such verifiers are done by:

Stanford: https://arxiv.org/pdf/1702.01135.pdf
ETHZ: https://www.sri.inf.ethz.ch/papers/sp2018.pdf
Google: https://arxiv.org/pdf/1803.06567.pdf, https://arxiv.org/pdf/1805.10265.pdf
Bosch: https://arxiv.org/pdf/1805.10265.pdf

This approach may help to check robustness properties of neural networks. The next step is to construct such a neural network, that has required robustness. Some of above papers contain also methods of how to do that.
There are different techniques to improve the robustness of neural networks:

adversarial training (see e.g. A. Kurakin et al., ICLR 2017)
defensive distillation (see e.g. N. Papernot et al., SSP 2016)
MMSTV defence (Maudry et al., ICLR 2018).

At least the last one can provably make NN more robust. More literature can be found here.

This sounds like an impossible claim... unless it's about some particular inputs X, rather than general inputs X? In which case, it seems to say next to nothing about hackability, since inputs need not be limited to perturbations of those in the training?

@Mehrdad: It's probably achievable in a probabilistic sense if the input space is sufficiently structured that you can randomly sample it. That is to say, you can probably establish that for 95% of possible inputs, 95% of disturbances smaller than ε do not affect the class label. This is equivalent to establishing that the border between output classes in input space is smooth, or that the largest part of the input space does not lie near a class border. Obviously some part of the input space has to lie near a class border.

I'm not sure this would apply in the "adversarial" case described in the paper: There, (IIRC) a back-propagated gradient is added to the whole picture, so the change to the complete input can be quite large - even if the change for each individual pixel is barely noticeable.

@MSalters: I guess, yeah. But then that seems to devalue it a fair bit unless you can actually show the pictures that are on a class border should actually be on a class border...

The sentence "The next step is to construct such a neural network, that has required robustness" is under research. In general it's very hard to get rid of NN non-robustness problem. But it's possible to enhance the robustness by adversarial training (see e.g. A. Kurakin et al., ICLR 2017), defensive distillation (see e.g. N. Papernot et al., SSP 2016), MMSTV defence (Maudry et al., ICLR 2018). At least the last one can provably make NN more robust.

@Mehrard Yes, inputs need to be limited to those in the training. If we don't provide robustness on the train set, it is meaningless to say anything about robustness in the general case. So those works start from the trivial goal: provide robustness at least for the train/test set. Even this trivial goal is not trivial to reach.

Is Artificial Intelligence Vulnerable to Hacking?

Invert your question for a moment and think:

What would make AI at less of a risk of hacking compared to any other
  kind of software?

At the end of the day, software is software and there will always be bugs and security issues. AIs are at risk to all the problems non-AI software is at risk to, being AI doesn't grant it some kind of immunity.
As for AI-specific tampering, AI is at risk to being fed false information. Unlike most programs, AI's functionality is determined by the data it consumes.
For a real world example, a few years ago Microsoft created an AI chatbot called Tay. It took the people of Twitter less than 24 hours to teach it to say "We're going to build a wall, and mexico is going to pay for it":

(Image taken from the Verge article linked below, I claim no credit for it.)
And that's just the tip of the iceberg.
Some articles about Tay:

BBC
The Verge

Now imagine that wasn't a chat bot, imagine that was an important piece of AI from a future where AI are in charge of things like not killing the occupants of a car (i.e. a self-driving car) or not killing a patient on the operating table (i.e. some kind of medical assistance equipment).
Granted, one would hope such AIs would be better secured against such threats, but supposing someone did find a way to feed such an AI masses of false information without being noticed (after all, the best hackers leave no trace), that genuinely could mean the difference between life and death.
Using the example of a self-driving car, imagine if false data could make the car think it needed to do an emergency stop when on a motorway. One of the applications for medical AI is life-or-death decisions in the ER, imagine if a hacker could tip the scales in favour of the wrong decision.

How we can prevent it?

Ultimately the scale of the risk depends on how reliant humans become on AI. For example, if humans took the judgement of an AI and never questioned it, they'd be opening themselves up to all sorts of manipulation. However, if they use the AI's analysis as just one part of the puzzle, it would become easier to spot when an AI is wrong, be it through accidental or malicious means.
In the case of a medical decision maker, don't just believe the AI, carry out physical tests and get some human opinions too. If two doctors disagree with the AI, throw out the AI's diagnosis.
In the case of a car, one possibility is to have several redundant systems that must essentially 'vote' about what to do. If a car had multiple AIs on separate systems that must vote about which action to take, a hacker would have to take out more than just one AI to get control or cause a stalemate. Importantly, if the AIs ran on different systems, the same exploitation used on one couldn't be done on another, further increasing the hacker's workload.

I like the idea of having several separate AI systems that have to reach agreement as a mitigation technique. Although then you'd have to be assured whatever voting mechanism they used couldn't be comprised to fake a decision.

@ChristopherGriffith True, that is a risk. In the case of the car, the best way to mitigate that is to design the system so that an attacker would need physical access to manipulate it and make it hard to reach so the person would have to break in to the car to access it. Keeping a system offline is generally a good hacking countermeasure, though not always ideal.

I believe it is, no system is safe, however I am not sure if I can still say this after 20-30 years of AI development/evolution. Anyways, there are articles that showed humans fooling AI (Computer Vision).
https://www.theverge.com/2018/1/3/16844842/ai-computer-vision-trick-adversarial-patches-google
https://spectrum.ieee.org/cars-that-think/transportation/sensors/slight-street-sign-modifications-can-fool-machine-learning-algorithms

I concur with Akio that no system is completely safe, but the take away is AI systems are less prone to attacks when comparing with the old systems because of the ability to constantly improve.
As time passes by more people will get in the field bringing new ideas and hardware will be improving so that they are "strong AI."

There are many ways to hack an AI. When I was kid I figured how to beat a chess computer. I always followed the same pattern, once you learn you can exploit it. The worlds best hacker is a 4 year old that wants something he will try different things until he establishes pattern in his parents. Anyway, Get an Ai to learn the patterns of a AI and given a given combination you can figure the outcome. There is also just plain flaws or back door in code either on purpose or by chance. There is also the possibility the AI will hack itself. It is called misbehaving, remember the small child again...
BTW simple way is to make AI always fails safe... something people forget.

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
What do the neural network's weights represent conceptually?
I understand how neural networks work and have studied their theory well.
My question is: On the whole, is there a clear understanding of how mutation occurs within a neural network from the input layer to the output layer, for both supervised and unsupervised cases?
Any neural network is a set of neurons and connections with weights. With each successive layer, there is a change in the input. Say I have a neural network with $n$ parameters, which does movie recommendations. If $X$ is a parameter that stands for the movie rating on IMDB. In each successive stage, there is a mutation of input $X$ to $X'$ and further $X''$, and so on.
While we know how to mathematically talk about $X'$ and $X''$, do we at all have a conceptual understanding as to what this variable is in its corresponding $n$-dimensional parameter space?
To the human eye, the neural network's weights might be a set of random numbers, but they may mean something profound, if we could ever understand what they 'represent'.

What is the nature of the weights, such that, despite decades worth of research and use, there is no clear understanding of what these connection weights represent? Or rather, why has there been so little effort in understanding the nature of neural weights, in a non-mathematical sense, given the huge impetus in going beyond the black box notion of AI.

Hi, Thanks for sharing the post. I did make a reference of that post before I made this post. That post does go into a few tools that might help in seeing 'what' the weights are. The question here is a bit different though. I want to know what the fused neural network connection weight, say 0.7 would mean in some higher neural dimension? Is there any study on this?

I don't know if my intuition is correct but I will give it a try.
You could see weights as how much important one thing is, the problem is to understand what that thing represents. When I say thing I'm referring to the output of a specific neuron. I don't think that we can say what the output of a neuron represents in the real world unless we directly relate it through an error function or if the function used to compute that particular value have some meaning in the real world.
Edit:
If you want, you could actually build your neural network such that its neurons represent something. It's also very simple. you have only to write down all the equations relative to that particular topic. You could put them in a big system or, and this is better, you could put them in several systems such that the outputs of system 1 are the input of system 2 and so on. You could convert each system into a layer where each neuron represents an equation. Note that in this case, you would have the classical neuron with

z = dot(w.T,x) + b
a = g(x)

but a more complex equation for z (but still based on weights) and a linear activation function for a. In this case, you could name each neuron and say what they represent in the real world.
However, this isn't the purpose of a neural network. A neural network should have neurons with simple equations to be fast thus the linear interpolating function dot(w.T,x) + b is the best choice (the fact that the activation function is almost always non linear and in some cases a non-banal function is due to other thing and could be an interesting question). A neural network should also be as general as possible because usually is build upon a system that you don't know completely.
So I modify slightly my answer: is not simply that you don't know what a neuron represent, excluding the ones of the output layer, you don't want that they have a meaning in the real world.

Thanks for your comment! It kinda validates my vague understanding into something more concrete. I would wonder if you know of any papers or citations that go into this topic?

@user248884 Sorry but I don't have any paper on the topic. Also, this is my personal understanding of the topic and could be completely wrong. :)

It's a bit of a challenge to answer your question, since you appear to be not really familiar with the basics. You're talking about mutations, and changes to the input.
No. The input is a vector of data, which initializes the value of the input nodes. The first layer of weights is then used to calculate the values for the next layer of nodes. This next layer is not a "mutation" of the input layer; that suggest the second layer of nodes is similar but not exactly identical to the first layer.
In reality, it's very common that the second layer of nodes does not even have the same shape as the first layer.
You are even wondering if certain weights have a certain meaning. That's even easier to answer. We know these networks are quite robust. We can ignore a significant percentage of the weights, and the classifications will change only a little. This shows that no individual weight represents a specific aspect of the network.

Well, even if it's not as one should see it, is correct to say that each layer does a transformation on its input since it's a function that maps (n_i,m) -> (n_{i+1},m). Where m is the number of examples and n_i and n_{i+1} are the input feature and the output features.


text:
Can minimax be used when both players want to increase their score?
If both the players want to increase their score (by selecting the highest or best cost path), can this be done using the minimax algorithm, or are there other algorithms for this purpose?

In a general-sum game, minimax can lead to suboptimal outcomes. This is most clear in fully collaborative scenarios, where assuming the worst of your partner is an overly conservative strategy.

I believe maximax is what you're looking for:

Maximax (economics, computer science, decision theory) A strategy or algorithm that seeks to maximize the maximum possible result (that is, that prefers the alternative with the chance of the best possible outcome, even if its expected outcome and its worst possible outcome are worse than other alternatives); often used attributively, as "maximax strategy", "maximax approach", and so on.SOURCE: maximax (wiki)

You may also be interested in "minimax regret":

The minimax regret approach is to minimize the worst-case regret. The aim of this is to perform as closely as possible to the optimal course. Since the minimax criterion applied here is to the regret (difference or ratio of the payoffs) rather than to the payoff itself, it is not as pessimistic as the ordinary minimax approach.
One benefit of minimax (as opposed to expected regret) is that it is independent of the probabilities of the various outcomes: thus if regret can be accurately computed, one can reliably use minimax regret. However, probabilities of outcomes are hard to estimate.
This differs from the standard minimax approach in that it uses differences or ratios between outcomes, and thus requires interval or ratio measurements, as well as ordinal measurements (ranking), as in standard minimax.
SOURCE: Minimax regret (wiki)

Apologies for just grabbing the wikis on this, but they are accurate.  Most of the references from economic sites are commercial.  If interested, when I have some more time, I could probably link to some peer-reviewed papers.  Hopefully, at the very least, this answer provides information for further research.


text:
How could an AI be used to improve the teaching and learning of mathematics?
I have been working with AI methods. I am thinking about how my daughter (and also other kids) could learn mathematics with the help of AI. For example, how could an AI be used to show the mistakes that a kid does during the learning path?

Fundraising is probably the most realistic answer with the biggest effect. Similar to simply adding blockchain to the company name helps.
For the question of real application, I should first say that I'm a machine learning engineer who works as a consultant. I had mathematics as a minor subject during bachelor's and Master's degree, which is like 80% of a bachelor's degree in mathematics. Mainly the bachelor's thesis is missing. I also gave private mathematics lessons.
I would distinguish learning mathematics at school from University. It's completely different. However, for this question it does not make much of a difference. It's also not super important that you ask it for math. It's about learning in general.
Machine learning tools can support for several minor tasks:

Figuring out how a symbol is called (I build write-math.com for that as a bachelor's project)
Figuring out what a symbol means
Getting relevant papers / parts of the lecture notes for a given problem
Helping to digitalize stuff for easier sharing / content creation
Learning things by heart: there are some nice apps like Anki which help you to learn arbitrary stuff by heart. The learning algorithm could potentially be improved by AI


text:
Algorithms for multiple agents problems
Can anyone recommend a reinforcement learning algorithm for a multi-agent environment?
In my simplified example, I'm implementing a Q-Learning system with different 10 agents. The agents compete for resources in stores at different locations by setting a bid price for each item.
All of the agents have different bids and pooled budget of $100. Once the budget is reached the agents cannot buy any more that day.
Each agent will receive a reward if they buy an item. The goal would be to maximize the total amount of items bought between the agents.
Right now the agents don't communicate.
Can someone point me in the right direction for an algorithm that allows agent cooperation?

You seem to have elements of both competitive and cooperative behaviour required, making it hard to answer the question. If the goal is to "maximize the total amount of items" (i.e. agents don't win or lose, the group as a whole does), then why do agents "compete for resources"?

If this is a simulation of something in the real world, cooperation is only limited by constraints in the simulated environment - otherwise you could re-frame the problem as a single agent issue. Those constraints will affect a good answer here, could you elaborate on what limits the agents face? What prevents them simply deferring to a single agent controller that makes the best decision for the group as a whole?


text:
Why are documents kept separated when training a text classifier?
Most of the literature considers text classification as the classification of documents. When using the bag-of-words and Bayesian classification, they usually use the statistic TF-IDF, where TF normalizes the word count with the number of words per document, and IDF focuses on ignoring widely used and thus useless words for this task.
My question is, why they keep the documents separated and create that statistic, if it is possible to merge all documents of the same class? This would have two advantages:

You can just use word counts instead of frequencies, as the documents per class label is 1.

Instead of using IDF, you just select features with enough standard deviation between classes.

My question is, why they keep the documents separated and create that statistic, if it is posible to merge all documents of the same class? This would have two advantages:

You can just use word counts instead of frequencies, as the documents per class label is 1.

In general, I don't think this is the case. I don't know if you have a specific equation in mind where it would end up being the same thing mathematically? Anyway, in general, it is possible that some documents in your corpus are very short, and others are very long. In such cases, you'd still want to make sure to use frequencies rather than raw word counts.
For example, suppose you have one very short text that is specifically about England. The word "England" may appear 10 times, but have a very high frequency due to it being a short text. If you compare it to a massive text that is about all countries in the world, that massive text may have the word "England" appearing 20 times, but with a significantly lower (relative) frequency.

Instead of using IDF, you just select features with enough standard deviation between classes.

I don't think this would work correctly because you may have significant differences among documents within a single class. Suppose, for example, that you have the following two classes of documents:

Scientific articles (about AI, math, biology, linguistics, astronomy, whatever else you can think of...)
News articles

Each of the "subdomains" in the single "scientific articles" class would likely have some highly specific terminology they use, which could be detected through TF-IDF. However, even though they're all in the same class of "scientific articles", they're likely all quite different from each other. If you put them all together and treat them as a single document, there is a risk that they'll all "average out" and become much more difficult to distinguish from a more general class such as the class of "news articles".


text:
Are deep learning models suitable for training with sparse data?
I am training a generative adversarial network (GAN) to generate images given edge histogram descriptor (EHD) features of the image. The EHD features are themselves sparse (meaning they contain a lot of zeroes). While training the generator loss and discriminator loss are reducing very slowly.
Are deep learning models (like GAN) suitable for training with sparse data for one or more of the features in the input or derived through feature extraction?

The problem isn't the GAN but the implementation of its discriminator which is typically a convolutional neural network (CNN).  CNNs have trouble with sparse data.  They require dense data to learn well.  There are ways to work around this.  See the following for some ideas:

Sparse and Dense Data with CNNs: Depth Completion and Semantic Segmentation
Sparse data in deep learning
SECOND: Sparsely Embedded Convolutional Detection


text:
How can I train a neural network for image classification when the dataset is small?
I need to train a convolutional neural network to classify snake images. The problem is that I have only a small number of images available for some snake types.
So, what is the best approach to train a neural network for image classification using a small data set?

Use Fine Tuning
You can simply use a pre-trained model on ImageNet, as this data set has multiple snakes classes.
Then you can fine tune the model with your own small data set and outputs.
See this for further understanding :
Fine Tuning in Keras
(if you don't use Keras, there are other tutorials on the internet using other Machine Learning framework)
The idea is just removing the last layer (1000 outputs if you use a model pre-trained with ImageNet) and adding a layer of your choice with random weights and a custom number of outputs (number of your classes).
Then your retrain your network, in general we retrained only the last layers (as first layers have more general features).

Besides using transfer learning described in other answer, you should consider using siamese network.
This type of network is used in cases when one does not posess many examples of objects he wants to distinguish. General idea is that instead of "telling" the network "This is a cobra", you provide information like: "This is a cobra, and that is a rattlesnake, learn the difference".
There is a whole subject dedicated to your problem and it is called one shot learning.
Take a look at this tutorial:
https://hackernoon.com/one-shot-learning-with-siamese-networks-in-pytorch-8ddaab10340e

This is what I learned on Andrew Ng's Deep Learning course at Coursera, and I recommend the course if the OP wants to learn about it.


text:
What are some examples of everyday systems that use AI?
I would like to know some daily basis applications of AI. I think these might be relevant examples:

Google search engine
Face recognition on iPhone

Are my examples correct? Could you provide some more examples?

A good, recent, and accessible book which includes many case studies is Prediction Machines. Check it out for more details than I can provide in this answer.
Example applications are all around us, but one of the problems with recognizing them is that the bar for what we call AI is constantly being raised.
Consider that a few decades ago, directions from google maps would certainly be recognized as AI, whereas now most laypeople wouldn't make that association.
Some other commonplace examples:

Amazon.com can guess at what you'd like to buy next.
Facebook and many other companies have programs that decide which ads to show you, without human intervention.
Tesla's autopilot feature will drive your car down a highway.
Google search can instantly return the results you were looking for, even when you enter strange or ambiguous search terms.
Virtual Assistants from many companies, like Alexa recognize your voice, figure out what words you're saying, and then figure out what you want them to do.
StackOverflow determines which questions are hot, and which ones need moderator attention.

There are are also a lot of less obvious examples. I'll pick a few from my research area:

When you spot a sky marshal on a plane, or a dog patrol in the airport it's because an AI system put them there. Some subway systems now use the same technology for fare checkers.
When people trade agricultural products in Uganda, it's an AI system and AI techniques at work behind the scenes.
When you're assigned a donor for a kidney transplant (and now other organs too), an AI system did the heavy lifting in that decision.

Of course, there's lots more going on too, but those should give you some suggestions for everyday conversation.


text:
Why do I get small probabilities when implementing a multinomial naive Bayes text classification model?
When applying multinomial Naive Bayes text classification, I get very small probabilities (around $10e^{-48}$), so there's no way for me to know which classes are valid predictions and which ones are not. I'd the probabilities to be in the interval $[0,1]$, so I can exclude classes in the prediction with say a score of 0.5 or less. How do I go about doing this?
This is what I've implemented:
$$c_{\operatorname{map}}=\underset{\operatorname{c \in C}}{\arg \max }(P(c \mid d))=\underset{\operatorname{c \in C}}{\arg \max }\left(P(c) \prod_{1 \leq k \leq n_d} P\left(t_{k} \mid c\right)\right)$$

I think your probabilities are split up among all possible outputs. If you add them all together, do they come out to 1? Order them by value and you have your predictions

Use log probabilities instead to avoid underflow when dealing with naive bayes probability. instead of a product of probabilities, compute the argmax summation of log probabilities

You could say that the class of the data (e.g. spam vs not spam) is a hidden quality that can be inferred through the observable features (e.g. message subject contains "bitcoin"),
$$P(C \; | \; F)$$
which says that the probability of the class $C$ is conditioned on the visibility of the feature $F$.
Using Bayes' theorem we can write
$$P(C \; | \; F) = \frac{P(F \; | \; C) \, P(C)}{P(F)}$$
Your problem is that you are not taking into account the evidence, $P(F)$, denominator in this expression.

You can have multiple features in your likelihood function
$$P(F \; | \; C) = P(F_1,F_2,F_3,\ldots \; | \; C)$$
and these can be independent
$$\prod_k P(F_k \; | \; C)$$
and then you have your prior
$$P(C) \prod_k P(F_k \; | \; C)$$
but what you are missing is the evidence factor in the denominator
$$P(C \; | \; F) = \frac{P(C) \prod_k P(F_k \; | \; C)}{\sum_C \scriptsize{P(C) \prod_k P(F_k \; | \; C)}}$$
This is the general view of the problem. Specifically, to fix your issue, evaluate the probabilities for all your classes, add them together, then divide each probability by that sum.
For instance, if you have two classes and the probabilities are $p_0$ and $p_1$, then write
$$P(C=0) = \frac{p_0}{p_0 + p_1}$$
and
$$P(C=1) = \frac{p_1}{p_0 + p_1}$$
which guarantees that
$$P(C=0) + P(C=1) = 1$$


text:
Can neuro-evolution methods be combined with A3C?
As a amateur researcher and tinkerer, I've been reading up on neuro-evolution networks (e.g. NEAT) as well as the A3C RL approach presented by Mnih et al and got to wondering if anyone has contemplated the merging of both these techniques.
Is such an idea viable? Has it been tried?
I'd be interested in any research in this area as it sounds like it could be compelling.

Is such an idea viable?

Yes.
One approach that should work in terms of underlying theory is to start with population of NEAT-generated networks that describe the policy, and instead of measuring fitness of them on the task whilst keeping all weights static, measure fitness whilst applying any policy gradient algorithm like A3C. In addition, the final weights of the networks could be fed into the next generation. A bit Lamarckian* perhaps, but that is already a thing in evolutionary algorithms.

Has it been tried?

Yes, a recent paper (July 2018) is "NEAT for large-scale reinforcement learning through evolutionary feature learning and policy gradient search".
I suspect there are more, including hobby efforts without academic publishing, but that is the first paper that popped up on a brief search.

* Jean-Baptiste Lamarck believed that offspring of animal parents could inherit traits based on parental behaviour and desires, such as a giraffe's neck evolving over time as the animals strived to reach higher food sources. Interestingly, although the core of this theory is not generally accepted, recent theories around phenotypic plasticity and discoveries in epigenetics show that biological systems can make use of the idea - although very far from the idea of children using parental memories directly to aid in tasks (which has more in common with science fiction for humans, but possible in neural networks where we can "copy brains").


text:
Reinforcement Learning with asynchronous feedback
I want suggestions on literature on Reinforcement Learning algorithms that perform well with asynchronous feedback from the environment. What I mean by asynchronous feedback is, when an agent performs an action it gets feedback(reward or regret) from the environment after sometime not immediately. I have only seen algorithms with immediate feedback and asynchronous updates. I don't know if literature on this problem exists. This is why I'm asking here.
My application is fraud detection in banking, my understanding is when a fraud is detected it takes 15-45 days for the system to flag it as a fraud sometimes until the customer complains the system doesn't know its fraud.
How would I go about designing a real-time system using reinforcement learning to flag transactions that are fraudulent or normal?
Maybe my understanding is wrong, I'm learning on my own if someone could help me I would be grateful.
The reason I'm looking at reinforcement learning instead of supervised learning is, it's hard to get ground truth data in the banking scenario. Fraudsters are always up-to-date or exceeding the state of the art in fraud detection. So I've decided that reinforcement learning would be an optimal direction to look for solutions to this problem.

Comments are not for extended discussion; this conversation has been moved to chat.

I have been looking for a while into pretty much precisely the problem you describe (including the same application domain), but haven't been able to find much.
The most obvious, mathematically "correct" solution would be to simply delay your standard Reinforcement Learning update rule (of whatever algorithm you choose to implement) by 45 days; if it still wasn't reported as a fraud then, assume it was genuine. This leads to some problems though;

Need lots of memory to store experiences that were not yet used for updates
Learning only starts after a significant delay, in which you don't learn anything at all yet and likely therefore run a suboptimal policy for a long time
Very slow to adapt to new strategies of the fraudsters
What to do with people who already report fraud cases earlier, like after 10 days? Delay them for the full 45 days anyway, or trigger updates immediately (and potentially mess up the ordering in which experiences actually occurred)?

A quick and dirty "solution" is the following;

When a transaction occurs, immediately trigger a learning update under the assumption that it was a genuine transaction (for example, with a reward of R = +1).
If that transaction is later reported as a fraud, trigger an additional update (with same (state, action) pair), but with the negation of the reward that was previously assigned erroneously on top of the normal negative reward for a fraudulent case. For example, if you would normally give R = +1 for genuines, and R = -100 for frauds, give a reward of R = -101 now. This reward will not correct for the previously assigned wrong reward in completely the right way (potentially wrong position in sequence of updates, discounting due to gamma and maybe lambda depending on algorithm used, etc.), but it should be somewhat close (especially if gamma and lambda are close to 1.0).

This is certainly not ideal, has very little theoretical basis and probably breaks quite a bit of Reinforcement Learning theory, but at least it is efficient in terms of computation and memory and in my experience it works alright in practice.

If you're using off-policy RL algorithms, you can use Experience Replay buffers (very popular in DQN-style things in Deep RL these days, but can also be used in tabular RL / RL with linear function approximation etc.). If you already have historical data generated through some non-RL policy in the past (which is typically the case in fraud detection / banking applications, they do have lots of data even if they don't always share it), you can use this to fill your experience replay buffer. In the case of the first solution (at the top of this answer), this can be used for training during the initial delay of 45 days.
Since you expect there to be concept drift though (fraudsters adapting their behaviour over time), you'll want to be careful with experience replay. Old data will become less useful.

A very different style of solution is to assume that you have a team of human experts available who can investigate a very small portion of incoming transactions relatively quickly. This tends to be true for large companies in practice ("investigating" often means a phone-call to a card holder). This enables you to generate accurate feedback for a small portion of your data more quickly, so that you can also do Reinforcement Learning with much less of a delay (albeit only on a small percentage of your experience).
You can read more about this idea in the following paper (disclaimer: I'm an author on it):

Dennis J.N.J. Soemers, Tim Brys, Kurt Driessens, Mark H.M. Winands, and Ann Nowé (2018). “Adapting to Concept Drift in Credit Card Transaction Data Streams Using Contextual Bandits and Decision Trees”. In Thirtieth Annual Conference on Innovative Applications of Artificial Intelligence (IAAI-18), pp. 7831-7836. AAAI Press.

Apart from that idea you might furthermore find it interesting for references to other related work, links to data you could use, etc.

I feel like it should be possible to extend the existing Reinforcement Learning theory with proper algorithms that can properly;

Take immediate learning steps with an assumed, default, potentially incorrect reward, and
Retroactively correct for previous incorrect updates if the reward turns out to be something else than previously assumed in hindsight.

I'm not aware of existing literature in which this is done though, and it certainly doesn't seem trivial; it will require starting pretty much from "first principles" (e.g., Bellman operator).
Intuitively, I also expect doing this completely correctly will always require a significant amount of memory (memory of all previous transactions of a card holder, such that state-action pairs can be re-generated if necessary). Banks likely already store that kind of data anyway for every customer, so it may not be a problem in practice.
If anyone's planning to work on this, feel free to contact me, I'll likely be happy to collaborate :D

Thank you very much for the info and pointers. Can you also include how you would go about modelling the problem statement to include state for the fraud detection scenario in your answer. I'm currently reading your paper. I will also write to the professor at my uni and ask his opinion. But this looks like a very good project to do. I think the non-existence of research in this direction is because of the game environments designed as test benches for algorithms. And thank you once again.

@papabiceps Tabular RL will not work, you will need function approximation, with states represented as feature vectors. There has been a lot of research using standard supervised learning for fraud detection, and those also all need feature vectors, so there has been a lot of research into feature engineering as well. Those same kinds of features can be useful here. Some of the papers in this repository are specifically about feature engineering (not all though)

That this question uses the word Feedback and made reference to more than one channel of feedback, "Reward and regret," indicates a comprehension of corrective signaling.  Some of the reinforcement learning literature that appears scientific lacks that understanding, so beware of that.
The temporal delay of fed back information is not unique to the case of banking fraud detection.  It is central to security breach detection in general, including web site hosting and telecommunications hacking.  It is also central to many other technology domains ranging from cyber-combat to chemical engineering to petroleum exploration.
Early control systems were of the PID form used in speed or direction governors.  In those, temporal elements were only analyzed to avert oscillation, overshoot, and undershoot.  Those are still relevant in fraud detection systems, but there are more requirements on the control system, specifically non-linearity in multiple dimensions.
Consequently, control theory has been extended more in the direction of measuring behavioral wellness.  Early temporal elements in digital systems included random access memory for applications and persistent memory for programs and data.  With the emergence of production ready AI, the temporal elements include acquired rules, fuzzy rule weights, convergence of network parameters corresponding to machine learning components, and other learned information.
The proof of concept in financial fraud detection is the same as for many other domains where the feedback can occur minutes, hours, days, or months after a decision was made or a signal propagated through an artificial learning network:  The neural networks of higher life forms, where asynchronous adaptation extends DNA based evolutionary adaptation, pain feedback is augmented by more abstract forms of feedback.  In humanoid and primate species, social satisfaction involves a specific signaling that involves neuro-compounds such as serotonin and oxytocin.
This kind of adaptation fits in asynchronicity between reflex and DNA adaptation, in the realm that ranges from Pavlov's conditioned response to the social phenomenon of commitment.  The importance of these capabilities is a result of the fact that not all sensory input that provides useful feedback about a behavior exhibited by the biological or artificial control system immediately after it is exhibited.
There is some suggested reading below, and you may want to examine Bayes' Theorem and some of the software you can download in nearly every common programming language that implements what is called Naive Bayesian Categorization.  It is through the mathematics of probability theory that the best causal models can be realized.  What you probably want to do is learn the key elements of modeling causality with numbers FIRST and then consider how basic probabilistic causality modeling might be augmented with artificial networks.
Although Richard Sutton and Andrew Barton's Reinforcement learning: An introduction (1998 MIT Press) is considered an excellent overview, the early comparative works provide a more direct path to answer questions about algorithms.
When you embark on algorithm development that involves both learning and asynchronicity, it is important to know at the onset that real time programming, such as is now used in high speed trading, is not for the faint at heart.  Real time processing places two reliability centered requirements on algorithms, and they should be addressed stringently if you want a stable, low maintenance system that works.

State-safe — In machine learning, functions that process feedback must not alter a set of interrelated parameters while in use by the forward propagation of the circuit.
Re-entrant — In machine learning, an interrupt from an incoming signal and a change of state must not frustrate the intent of the algorithm interrupted upon its resuming.

Regarding attacks to banking systems, there will be escalation.  The countermeasures the banks take will be met by the countermeasure of the thieves.  It is a game, and the banking industry is wise to employ researchers and engineers that understand that learning is feedback dependent.
You may not find the best final designs in the liturature for this reason.  Banks naturally employ nondisclosure agreements (NDAs) to keep attackers from gaining knowledge about defensive strategies through web searches.  (If it is on the web, it is probably already hacked.)
As researchers and engineers they employ, we are wise to employ asynchronous feedback and real time learning in fraud detection systems and seek a more informed position to stay ahead of engineers that don't value property rights for anyone but themselves.
Suggested Literature
A  Unified Analysis of Value-Function-Based Reinforcement-Learning Algorithms, Csaba Szepesvari, Michael L.  Littman, October 27, 1998
Asynchronous Methods for Deep Reinforcement Learning, Volodymyr Mnih et al, University of Montreal, 2016
Deep  Reinforcement  Learning  for  Robotic  Manipulation  with
Asynchronous  Off-Policy Updates, Shixiang Gu, Ethan Holly, Timothy Lillicrap, Sergey Levine, 2016
Dynamic causal modelling, K.J. Friston, L. Harrison, and W. Penny, Institute of Neurology, UK, 2003

Reward and regret refer to same thing. reward = - regret.

I think what I want to solve is different from what the papers on asynchronous updates are doing.

Not that simple. Human feedback from fastest to slowest: (a) Reflex, (b) Pain-conditioned response, (c) Reproductive incentive, (d) Social satisfaction -- Regret is in the domain of d. -- The neuro-chemical and behavioral evidence opposes the old idea that pain and pleasure are opposites. Pain meds block pain feedback before its perception and the subject verbalizes it as pleasure. Sexual satisfaction is an independent system that takes minutes. Pain can arise in less milliseconds when a needle pierces the dermis. Pain and reproductive incentive can operate simultaneously.

What were you thinking you want to do? Explain more and maybe I can help. I've done fraud detection for two contracts with a major financial organizations.

In those papers they exploit the parallel nature of multiple threads and use experience replay, capturing an agent’s data which can subsequently be batched and/or sampled over different time-steps. This is similar to batch updates we do in normal batched deep learning.

How familiar are you with Bayes' Theorem and the naive categorization software that employ it?


text:
Does an AI exist that can write software based on a formal specification?
Does an AI exist that can automatically write software based on a formal specification of the software?

I think that the answer to your question is yes. In the article New A.I. application can write its own code, the authors state

Computer scientists have created a deep-learning, software-coding application that can help human programmers navigate the growing multitude of often-undocumented application programming interfaces, or APIs.
Designing applications that can program computers is a long-sought grail of the branch of computer science called artificial intelligence (AI). The new application, called Bayou, came out of an initiative aimed at extracting knowledge from online source code repositories like GitHub. Users can try it out at askbayou.com.

The paper Neural Sketch Learning for Conditional Program Generation may also be useful.

There's Neural Program Synthesis, which can be used to generate a piece of code. Please, have a look at the article Neural Program Synthesis by Microsoft for an overview of the field.

You could also take a look at DeepCoder: Learning to Write Programs.

The other answers cover modern work on this, but it's not even a new topic!
Koza's work in Genetic Programming (1992) led to whole sub-fields doing this. The techniques are widely used, robust, and well understood. They're just very computationally expensive. Enough so that most of the time you're better off just hiring a programmer to do it.

authors: Андрій Немченко


text:
How does rotating an image and adding new 'rotated classes' prevent overfitting?
From Meta-Learning with Memory-Augmented Neural Networks in section 4.1:

To reduce the risk of overfitting, we performed data augmentation by randomly translating and rotating character images. We also created new classes through 90◦, 180◦ and 270◦ rotations of existing data.

I can maybe see how rotations could reduce overfitting by allowing the model to generalize better. But if augmenting the training images through rotations prevents overfitting, then what is the purpose of adding new classes to match those rotations? Wouldn't that cancel out the augmentation?

I'm not submitting this as the answer because it isn't a complete answer. I think you can get an understanding by studying GAN's though - https://deeplearning4j.org/generative-adversarial-network
The idea is you provide a wider variation of information that needs to be accurately detected. This prevents the network from identifying false associations. Spatial pooling is supposed to make a network resilient against remembering features relative to their position on an image. Providing more samples with more variations only adds to the ability for the network to abstract.

How can data augmentation reduce overfitting?
You write that you can already maybe see how data augmentation can help prevent overfitting in general, but it sounds a bit uncertain and it's still asked in the title of the question, so I'll address this first:
Generally, when we use Machine Learning for classification problems, we would ideally learn a classifier that can perform well on a population. An example of a population would be: the set of all handwritten characters in the entire world. Generally, we don't have that complete population available for training, we only have a (much smaller) training dataset. If a training set is large enough, it might be a good approximation of the true population we're interested in (a "dense sampling" of the space we're interested in), but it's still just that; an approximation.
We say that a learning algorithm is overfitting if it performs singificantly better on the training set than it is on the population (which we generally approximate again using a separate test set).
Now, data augmentation (like adding rotations / translations of images in the training set to the training set) can help combat overfitting because it bridges the gap between training set and population. The population (all handwritten characters in the entire world) will likely include characters at various offsets from the middle (e.g. translations) and at various rotations. So, data augmentation is simply adding more examples (and possibly more varied examples) to our training set, which importantly are considered to be a part of the population we're interested in. If, for example, the population we are interested in were only the set of all handwritten characters at a specific position in the image (e.g., centered), then augmenting the dataset by adding various translations would not help; we'd be adding instances that are outside the population we want to learn about.

Why doesn't adding extra classes for rotations cancel out augmentations?
There are two possible explanations I can come up with:

Maybe the "extra-class" rotations are different from the "data augmentation" rotations.

Here is the exact quote that's relevant from the paper:

"To reduce the risk of overfitting, we performed data augmentation by randomly translating and rotating character images. We also created new classes through 90◦, 180◦ and 270◦ rotations of existing data."

That first sentence is not 100% clear in my opinion. I imagine the translations they use for data augmentation are relatively small (e.g. offsets of a few pixels), so maybe the rotations they use for data augmentation are also only "small" rotations (for example, between -10◦ and +10◦). The "larger" rotations (multiples of 90◦) described in the second sentence may then no longer be a part of the "data augmentation to reduce the risk of overfitting" in the first sentence; they're simply parts of a different action performed to increase the number of classes in the dataset (and, I imagine, for each of these larger rotations they may again perform "smaller rotations" for data augmentations).
This explanation is kind of hypothetical though, it's not 100% clear from the paper exactly what they mean here in my opinion.

"Overfitting" can have a slightly different interpretation in the case of one-shot learning than in traditional learning.

Note that this paper is about "one-shot learning", where the goal is to be able to classify accurately after being presented only a single example ("one shot") of a never-before-seen class. In such one-shot problems, you could in some sense say that an algorithm might "overfit" to the "distribution of classes" if it can only perform one-shot learning well on a certain set of similar classes, but not on others.
For example, if you only train one-shot learning on a set of handwritten characters that are "upright" (close to 0 rotation), your algorithm might be able to perform well in terms of one-shot learning when presented with new classes (new handwritten characters) that are also upright, but might be incapable of proper one-shot learning when presented with new classes (new handwritten characters) that are upside-down.

Over-fitting in the context of convergence in a neural network can have many causes.  When the model implied in the design of the network is not well fitted for the task, the network may still converge within the time frame allowed and the example set presented but it will take more time and a greater number of examples than necessary, and the reliability and accuracy of the trained circuit may be far below what could be achievable with a solid design.
Gross over-fitting can be one of the causes of decreased reliability.  A more slight over-fit will exhibit accuracy somewhat diminished from the accuracy found by the end of training.
This is why various designs have emerged with functionally specific circuit simulations between more general multi-layer perceptron networks.

Convolution kernels
Rotations
Other basic translations
Hash lookups
Other patterned circuits that remove burden from general convergence

In the case of rotation, the convergence on an optima angle in one specialized layer or longitudinal stack element can remove considerable burden and allow overall convergence with fewer general activation layers, using fewer examples, and with a significantly more reliable and accurate result.
Consider what perceptrons must do to rotate an image arbitrarily.  They must wire what is essentially rotational trigonometry into the parameters of everything that is orientation-dependent within the network, creating what is essentially a pliable helix, possibly in many locations within the trained network.  Creating the pliable helix functionality, parameterized in advance of training and carefully handling back-propagation to adjust to its existence, drastically reduces the complexity of convergence.
If done well, over-fitting will be much less of an issue.  If done poorly, there could be worse over-fitting or other problems such as non-convergence.
In summary, the best practice is to leave to general network training what must, by its nature, be complex but handle with specific functionality what is well understood and for which mathematical and algorithmic approaches already exist.


text:
When working with time-series data, is it wrong to use different time-steps for the features and target?
When working with time-series data, is it wrong to use daily prices as features and the price after 3 days as the target?
Or should I use the next-day price as a target, and, after training, predict 3 times, each time for one more day ahead (using the predicted value as a new feature)?
Will these 2 approaches give similar results?

Have you considered trying out both apporaches on your training data and comparing which one performs better?

This question was also asked here.

I don't know what kind of price data you're dealing with. I suppose the order of the data matters a lot, so my suggestion would be:

Use LSTM as it handles time series better
You can predict 3 consecutive numbers from an RNN as the next three days' predictions
Try regression first, it is likely it will not work (or just flatten the curves, depend on your data noise), then classification is an easier approach
Don't forget normalization


text:
In what ways is the term "topology" applied to Artificial Intelligence?
I have only a general understanding of General Topology, and want to understand the scope of the term "topology" in relation to the field of Artificial Intelligence.
In what ways are topological structure and analysis applied in Artificial Intelligence?

Here is a related question, which focuses on the applications of topology (as a field) to deep learning.

So, besides TDA (Topological Data Analysis), there does not seem to be any definable locus were topology, stricto sensu, is utilized by AI, if we define topology as: "the study of the properties of a geometric object that are preserved under continuous deformations, such as stretching, twisting, crumpling, and bending; that is, without closing holes, opening holes, tearing, gluing, or passing through itself." A further question might be: are any/all forms of graphs (particularly data graphs) definable as "geometric objects"?

I spent some time thinking about it, but I'm aware of only two main meanings. There might be more that aren't coming to me right now though...
In local search problems or sometimes in optimization for machine learning, the "topology" of a problem corresponds to the change in the function you're optimizing as you move between adjacent states. If the change is sharp, you have a "rugged topology". If it's gentle and continuous, you have a "smooth topology". See on page 2 of An Introduction to Fitness Landscape Analysis
and Cost Models for Local Search for example.
The other major meaning is with reference to the structure (topology) of a combinatorial graph. Many modern machine learning algorithms are based in the idea of combinatorial graphs, including Bayesian Networks, Sum/Product Networks, and Deep Neural Networks. Here, topology refers to the topological ordering of a directed graph, or more informally, to "how the graph is structured". For example, in a neural network, the depth and width of the network's layers, and the nature of the connections between layers, define the topology of the network.
Additionally, it gets used a lot in the sense of the second meaning in other areas of AI, just because those areas also use graphs. For example, in automated planning, or in probabilistic reasoning, it is also common to represent your problem as a combinatorial graph. You could then talk about the "topology" of the problem.

In addition to the ways the term topology is itself used generically to describe the "shape" of various aspects of Machine Learning, the term appears in the field Topological Data Analysis:

In applied mathematics, topological data analysis (TDA) is an approach to the analysis of datasets using techniques from topology. Extraction of information from datasets that are high-dimensional, incomplete and noisy is generally challenging. TDA provides a general framework to analyze such data in a manner that is insensitive to the particular metric chosen and provides dimensionality reduction and robustness to noise. Beyond this, it inherits functoriality, a fundamental concept of modern mathematics, from its topological nature, which allows it to adapt to new mathematical tools.

Some examples of its use in ML:

The ring of algebraic functions on persistence bar codes, Homology, Homotopy and Applications
Persistence Images: A Stable Vector Representation of Persistent Homology
Topological data analysis and machine learning theory
Topological Kernel Learning: Discrete Morse Theory is used to connect kernel machine learning with topological data analysis.


text:
Can neural networks be used to prove conjectures?
Imagine I have a list (in a computer-readable form) of all problems (or statements) and proofs that math relies on.
Could I train a neural network in such a way that, for example, I enter a problem and it generates a proof for it?
Of course, those proofs then needed to be checked manually, but maybe the network then creates proofs from combinations of older proofs for problems yet unsolved.
Is that possible?
Would it be possible, for example, to solve the Collatz-conjecture or the Riemann-conjecture with this type of network? Or, if not solve, but maybe rearrange patterns in a way that mathematicians are able to use a new "proof method" to make a real proof?

You will anyway be confronted with Gödel's incompleteness theorem, which is mathematically proven, and says in a nutshell that some conjectures are true but not provable. So we know for sure that there is no universal theorem-prover.

Here is a related question.

Not in such straight forward way as described, but neural networks are successfully applied to guide the search of proof. There are automated theorem provers. What they do look roughly like this:

Get the mathematical statement
Apply one of the known mathematical equivalence transformations (theorems, axioms, etc)
Check, if the resulting statement is trivially true. Then our sequence of transformations is the proof (since they all were equivalence transformations). Else, goto 2.

The tricky part here is to choose which transformation to apply at step 2. A neural network can be trained to predict function like

Statement, Transformation --> usefulness of that transformation to that statement

Then, during the search, we can apply such transformation, that neural network considers the most useful. Also, proving a theorem can be considered game, where axioms are the rules, and when you've reached the proof you win. In this form, Reinforcement Learning agents can be applied to prove theorems (this is also successfully done).
Here are papers that do similar things:

Generating Correctness Proofs with Neural Networks (Proverbot9001)
A Learning Environment for Theorem Proving (GamePad)
Learning to Prove with Tactics (TacticToe)
Learning to Prove Theorems via Interacting with Proof Assistants (CoqGym)
HOList: An Environment for Machine Learning of Higher-Order Theorem Proving
Reinforcement Learning of Theorem Proving (rlCoP)

Your idea may be feasible in general, but a neural network is probably the wrong high level tool to use to explore this problem.
A neural network's strength is in finding internal representations that allow for a highly nonlinear solution when mapping inputs to outputs. When we train a neural network, those mappings are learned statistically through repetition of examples. This tends to produce models that interpolate well when given data similar to training set, but that extrapolate badly.
Neural network models also lack context, such that if you used a generative model (e.g. an RNN trained on sequences that create valid or interesting proof) then it can easily produce statistically pleasing but meaningless rubbish.
What you will need is some organising principle that allows you to explore and confirm proofs in a combinatorial fashion. In fact something like your idea has already been done more than once, but I am not able to find a reference currently.
None of this stops you using a neural network within an AI that searches for proofs. There may be places within a maths AI where you need a good heuristic to guide searches for instance - e.g. in context X is sub-proof Y likely to be interesting or relevant. Assessing a likelihood score is something that a neural network can do as part of a broader AI scheme. That's similar to how neural networks are combined with reinforcement learning.
It may be possible to build your idea entirety out of neural networks in principle. After all, there are good reasons to suspect human reasoning works similarly using biological neurons (not proven that artificial ones can match this either way). However, the architecture of such a system is beyond any modern NN design or training setup. It definitely will not be a matter of just adding enough layers then feeding in data.

It's possible, but probably not a good idea.
Logical proof is one of the oldest areas of AI, and there are purpose-built techniques that don't need to be trained, and that are more reliable than a neural-network approach would be, since they don't rely on statistical reasoning, and instead use the mathematician's friend: deductive reasoning.
The main field is called "Automated Theorem Proving", and it's old enough that it's calcified a bit as a research area. There are not a lot of innovations, but some people still work on it.
The basic idea is that theorem proving is just classical or heuristic guided search: you start from a state consisting of a set of accepted premises. Then you apply any valid logical rule of inference to generate new premises that must also be true, expanding the set of knowledge that you have. Eventually, you can prove a desired premise, either through enumerative searches like breadth first search or iterative deepening, or through something like A* with a domain-specific heuristic. A lot of solvers also use just one logical rule (unification) because it's complete, and reduces the branching factor of the search.

I've published an article with the corresponding new method based on the generative grammars of first-order theories:
Thoughts on generative grammars and their use in automated theorem proving based on neural networks
This approach allows not to use previous data but to generate it as much as it's needed in machine learning. In the article, you may find necessary theory on logic, grammars, and neural networks. You'll also find examples of the python-functions generating proofs literally. I've added a grammar for the propositional logic that can be naturally enlarged to the "real" cases of first-order theories (say, group or number theory).

I suggest that you provide a link to the pdf that we can access freely. I am not familiar with that site, but to access your article I need to log-in with google or facebook.


text:
What are some books or state of the art papers about the development of a strong-AI?
I am looking for books or to state of the art papers about current the development trends for a strong-AI.
Please, do not include opinions about the books, just refer the book with a brief description. To emphasize, I am not looking for books on applied AI (e.g. neural networks or the book by Norvig). Furthermore, do not consider AGI proceedings, which contains papers that focus on very concrete aspects. The related Wikipedia describes some active investigation lines about AGI (cognitive, neuroscience, etc.) but can not be considered an educational/introductory resource. Finally, I am not interested in philosophical questions related to AI safety or risks or its morality if they are not related to its development. Development doesn't exclude mathematical foundation about it.
By example, if I look by example at this list "https://bigthink.com/mike-colagrossi/the-10-best-books-on-ai", the final candidates list became empty.

Here are 2 related questions What is the current state of AGI development? and What are some online courses on artificial general intelligence?.

There is actually a book called Artificial General Intelligence by  Ben Goertzel and Cassio Pennachin. It's a bit out of date (from 2008), and published as a Springer-Verlag monograph (which tends to have fairly low editorial standards). This one is also an anthology, with each chapter written by a different author. It's probably not suitable as an undergraduate level book, but it does seem to contain something like the information that's wanted.

The paper Artificial General Intelligence: Concept, State of the Art, and Future Prospects (2014), by Ben Goertzel (one of the people that are really still very interested in AGI), surveys the field of artificial general intelligence (AGI), its progress, approaches, mathematical formalisms, engineering, and biology-inspired perspectives, and metrics for assessing AGI.
Just to give a little bit more context and whet your appetite, let me briefly describe the different approaches to AGI (section 3, p. 14).

symbolic approach (which is based on the Physical Symbol System Hypothesis; examples of this approach are ACT-R or SOAR),

emergentist approach (aka sub-symbolic, i.e. the use of neural networks, and similar sub-symbolic models, from which abstract symbolic processing/reasoning can or is expected to emerge; so examples of this approach is deep learning, computational neuroscience, and artificial life),

hybrid approach (a combination of the symbolic and sub-symbolic approaches; examples of this approach are CLARION and CogPrime), and

universalist approach (examples of this approach are the AIXI and Gödel machine).


text:
What is the difference between artificial intelligence and computational intelligence?
Having analyzed and reviewed a certain amount of articles and questions, apparently, the expression computational intelligence (CI) is not used consistently and it is still unclear the relationship between CI and artificial intelligence (AI).
According to IEEE computational intelligence society

The Field of Interest of the Computational Intelligence Society (CIS) shall be the theory, design, application, and development of biologically and linguistically motivated computational paradigms emphasizing neural networks, connectionist systems, genetic algorithms, evolutionary programming, fuzzy systems, and hybrid intelligent systems in which these paradigms are contained.

which suggests that CI could be a sub-field of AI or an umbrella term used to group certain AI sub-fields or topics, such as genetic algorithms or fuzzy systems.
What is the difference between artificial intelligence and computational intelligence? Is CI just a synonym for AI?

What is the difference between Artificial Intelligence and Computational Intelligence?

The short answer is that they are two parallel research efforts working on similar problems, but with different methodologies and histories. Essentially, they study similar things, but with different tools. In the modern context, computational intelligence tends to use bio-inspired computing, like evolutionary and genetic algorithms. AI tends to prefer techniques with stronger theoretical guarantees, and still has a significant community focused on purely deductive reasoning. The main area of overlap is in machine learning, especially neural networks.

The longer answer is that your source from 1948 says they are synonyms in part because it predates the split in the research community, which took place later.
The two communities have always some overlap in topics, but in my experience, mostly are skeptical of each other's methodologies, and mostly publish in separate journals. Some authors consider CI to be a subset of AI however, particularly those writing in the 1990s.
Example topics that are solidly in AI but definitely not in CI are logical and expert systems, and statistical approaches to machine learning like regression.
Example topics that are solidly in CI but perhaps not in AI (depending on whether one views CI as a subset of AI or not) are genetic programming, fuzzy logic, and ant colony optimization.
As a rule, AI-rooted techniques have better theoretical guarantees, and better developed theory in general (there are exceptions though). For example, Fuzzy Logic has been strongly criticized for the lack of a solid theoretical foundation (good modern summary here), as have genetic and evolutionary approaches (most famously, both lack a proof of convergence within finite time to a global optimum on a smooth surface, even though they do quite well in practice).
CI-rooted techniques nonetheless often see major performance advantages in specific problems (see, for instance, deep learning results), and tend to have a strong experimental and engineering tradition. The No Free Lunch theorems are often used to justify their use when theoretical certainty is missing. Basically, the theorems say that, in learning and optimization problems, a technique can only perform well on a problem by performing poorly on some other problem. CI authors argue that there are some problem domains in which their techniques work well (which must be true, because simpler algorithms like hill-climbing outperform them on simple problems).
Check out this paper for lots more references on CI, or this book for a list of core topics in the field.

Comments are not for extended discussion; this conversation has been moved to chat.

The book Computational Intelligence: An Introduction (2nd edition, 2007) by Andries P. Engelbrecht, which has been cited more than 3000 times, defines artificial intelligence as follows

These intelligent algorithms include artificial neural networks, evolutionary computation, swarm intelligence, artificial immune systems, and fuzzy systems. Together with logic, deductive reasoning, expert systems, case-based reasoning and symbolic machine learning systems, these intelligent algorithms form part of the field of Artificial Intelligence (AI). Just looking at this wide variety of AI techniques, AI can be seen as a combination of several research disciplines, for example, computer science, physiology, philosophy, sociology and biology.

and computational intelligence as follows

This book concentrates on a sub-branch of AI, namely Computational Intelligence (CI) – the study of adaptive mechanisms to enable or facilitate intelligent behavior in complex and changing environments. These mechanisms include those AI paradigms that exhibit an ability to learn or adapt to new situations, to generalize, abstract, discover and associate. The following CI paradigms are covered: artificial neural networks, evolutionary computation, swarm intelligence, artificial immune systems, and fuzzy systems.

He then notes

At this point it is necessary to state that there are different definitions of what constitutes CI. This book reflects the opinion of the author, and may well cause some debate. For example, swarm intelligence (SI) and artificial immune systems (AIS) are classified as CI paradigms, while many researchers consider these paradigms to belong only under Artificial Life. However, both particle swarm optimization (PSO)
and ant colony optimization (ACO), as treated under SI, satisfy the definition of CI given above, and are therefore included in this book as being CI techniques. The same applies to AISs.

So, there may be different definitions of CI (given by different people), but, given that this book has been cited so many times, I would just stick to these definitions and use this book as a reference (I have actually consulted it a few times in the past). My university library even contains a copy of it.
To summarise, CI is a sub-field of AI, which studies (or is associated with) the following topics

artificial neural networks (NN),
evolutionary computation (EC),
swarm intelligence (SI),
artificial immune systems (AIS), and
fuzzy systems (FS).

which are also part of AI, which additionally studies

logic,
deductive reasoning,
expert systems,
case-based reasoning, and
symbolic machine learning systems.

Just to give further credibility to these definitions, Andries P. Engelbrecht has an h-index of 59, has been cited 22557 times, and is an IEEE Senior Member. You can find more info about him here. Note that I have no affiliation with him. I am just providing this information so that people start to follow these definitions (rather than just looking at definitions given by people who have not extensively studied the field). Moreover, note that the definition of CI given by Engelbrecht is consistent with the definition given by IEEE that you are quoting.


text:
How can I create a chatbot application where the user can create its own bot?
I am trying to create a chatbot application where the user can create its own bot, like Botengine. After going through google, I saw I need some NLP API to process the user's query. As per wit.ai basic example, I can set and get data. How I am going to create a bot engine?
So, as far I understand the flow, here is an example for pizza delivery

The user will enter a welcome message, i.e - Hi or Hello
The welcome reply will be saved by bot owner in my database
The user will enter some query, then I will hit wit.ai API to process that query. Example: The user's query is "What kind of pizza's available in your store" and wit.ai will respond with the details of intent "pizza_type"
Then I will search for the intent returned by wit in my database.

So, is that the right flow to create a chatbot? Am I in the right direction? Could anyone give me some link or some example so I can go through it? I want to create this application using Node.js. I have also found some example in node-wit, but can't find how I will implement this.

We can give you a glimpse from where to start, however can you go through the community guidelines.Just a little bit.Can you give us a link to your project if you don't mind!

I am working  on my local, and I could not make so much progress so I can share you. All I need a basic knowledge to start the project.


text:
Why coupling coefficients in capsule neural networks can't be learned by back-propagation?
The paper Dynamic Routing Between Capsules uses the algorithm called "Dynamic Routing Between Capsules" to determine the coupling coefficients between capsules.
Why it can't be done by backpropagation?

Very interesting paper.
We can see that they have effectively modeled probabilistically the fuzzy existence of an object with various geometric attributes as objects in a scene with a hook to the region of pixels that correspond to its possible existence.  I agree with the authors that this is a much more robust approach than CNN and LSTM and may compete well with the emerging attention based approaches.
Back propagation does seem to be involved, although that is not the focus of the paper.
Notice, "there is top-down feedback," and, "an appropriate parent in the layer above," which are hints to a hierarchical approach, and we can see this approach is not absent of its context in the overall feeding forward of input signalling to output, all of which must be trained as a whole.  But just as with much older control systems, the end-to-end convergence is facilitated by (not replaced by) more local convergence of subsystems with their own control objectives.
The overview is shown in section 4 on page 4.
The entire thing could conceivably be done without capsules at all, as with the aforementioned designs, but this group is apparently showing improved results when stopping short of full convergence on the MNIST.  No comparison is shown with LSTM, but even if LSTM was showing greater results, this direction of research is an excellent one because of the probabilitic way that it approaches an object.
Consider the classic case of waving back at someone who, as it turns out, was waving at someone behind you.  The existence of an object or an action is necessarily probabilitic, and to construct the depth of network required to model all that complexity with ReLU is probably unrealistic as the expectations increase in AI system requirements.


text:
Is there any way and any reason why one would introduce a sparsity constraint on a deep auto-encoder?
Is there any way and any reason why one would introduce a sparsity constraint on a deep autoencoder?
In particular, in deep autoencoders, the first layer often has more units than the dimensionality of the input.
Is there any case in the literature where a penalty is explicitly imposed for non-sparsity on this layer rather than relying solely on back-propagation and maybe weight decay as in a normal multilayer network?
I read this tutorial on sparse autoencoders and searched a bit online, but I did not find any case where such a sparsity constraint is used in any other case than when only a single layer is used.

If you can make a single layer autoencoder with a sparcity constraint then you can take a few of those to make a stacked autoencoder. In keras it is a pain to use with the sequential model API,