A method of performing privacy-preserving machine learning, the method comprising: storing, at K training computers (230, 240), secret-shared private data from a plurality of data clients, K being equal to two or more, wherein each data item of the secret-shared private data is represented by K parts when secret-shared, and wherein the secret-shared private data includes a set of training samples, each having d features and an output Y; initializing values for a set of d weights for a machine learning model, the weights being secret-shared among the K training computers, wherein the weights and the features are stored as integers; identifying a cost function that provides an accuracy of the set of d weights in predicting the outputs Y of the set of training samples; selecting a training sample; at each of the K training computers (230, 240): computing an error term of the cost function with respect to a Jth weight to determine a Jth delta part, wherein computing the error term includes: performing a first multiplication using d feature parts of the selected training sample and d weight parts in determining a forward part, the forwards parts comprising a secret-shared forward propagation result from a product of the d features and the d weights, the first multiplication using a first multiplication triplet of random integers; truncating the Jth delta part; using the truncated Jth delta part to update a Jth weight part of the d weight parts; repeating for other training samples and other weights of the d weights to train the machine learning model. storing, at K training computers (230, 240), secret-shared private data from a plurality of data clients, K being equal to two or more, wherein each data item of the secret-shared private data is represented by K parts when secret-shared, and wherein the secret-shared private data includes a set of training samples, each having d features and an output Y; initializing values for a set of d weights for a machine learning model, the weights being secret-shared among the K training computers, wherein the weights and the features are stored as integers; identifying a cost function that provides an accuracy of the set of d weights in predicting the outputs Y of the set of training samples; selecting a training sample; at each of the K training computers (230, 240): computing an error term of the cost function with respect to a Jth weight to determine a Jth delta part, wherein computing the error term includes: performing a first multiplication using d feature parts of the selected training sample and d weight parts in determining a forward part, the forwards parts comprising a secret-shared forward propagation result from a product of the d features and the d weights, the first multiplication using a first multiplication triplet of random integers; truncating the Jth delta part; using the truncated Jth delta part to update a Jth weight part of the d weight parts; performing a first multiplication using d feature parts of the selected training sample and d weight parts in determining a forward part, the forwards parts comprising a secret-shared forward propagation result from a product of the d features and the d weights, the first multiplication using a first multiplication triplet of random integers; truncating the Jth delta part; using the truncated Jth delta part to update a Jth weight part of the d weight parts; repeating for other training samples and other weights of the d weights to train the machine learning model.