Commit graph

39 commits

Author SHA1 Message Date
Nicolas Papernot
a06bc6c99b fix imports for v1 and make the versioning more explicit through LooseVersion
PiperOrigin-RevId: 249732562
2019-05-23 15:57:08 -07:00
Ilya Mironov
0efb23afcb Changing initial capacity for the ledger to smaller values. (+ restoring compatibility with Python 2)
PiperOrigin-RevId: 249292683
2019-05-21 11:38:27 -07:00
Galen Andrew
3908429796 Make DPQuery classes (almost) completely functional: the only state from the initializer that is used gets pushed into the initial_global_state.
PiperOrigin-RevId: 248424593
2019-05-15 16:06:37 -07:00
Ilya Mironov
9cece21d92 Clean-up pass to eliminate warnings: replacing deprecated endpoints with recommended versions and annotating test sizes.
PiperOrigin-RevId: 246901723
2019-05-06 14:50:23 -07:00
Steve Chien
beb86c6e18 Update PrivacyLedger and DPOptimizer to make certain arguments optional.
PiperOrigin-RevId: 246235646
2019-05-01 18:07:32 -07:00
Nicolas Papernot
c09ec4c22b minor fixes to improve tf 1 and 2 compatibility
PiperOrigin-RevId: 246008822
2019-04-30 13:22:57 -07:00
Nicolas Papernot
febafd830d update API calls for TF2
PiperOrigin-RevId: 245817981
2019-04-29 14:00:40 -07:00
Steve Chien
31219a5f3f Fix DP optimizers to handle gradients that are None.
PiperOrigin-RevId: 244429987
2019-04-19 15:07:55 -07:00
Galen Andrew
9106a04e2c Use PrivacyLedger for privacy accounting.
Prior to this change the PrivacyLedger is running to keep a log of private queries, but the ledger is not actually used to compute the (epsilon, delta) guarantees. This CL adds a function to compute the RDP directly from the ledger.

Note I did verify that the tutorial builds and runs with the changes and for the first few iterations prints the same epsilon values as before the change.

PiperOrigin-RevId: 241063532
2019-03-29 15:31:32 -07:00
Galen Andrew
6231d0802d Cleanup directory structure, add top-level imports and add normalized_query.
Moved query classes from dir optimizers into new dir dp_query. Added NormalizedQuery class for queries that divide the output of another query by a constant like GaussianAverageQuery.

PiperOrigin-RevId: 240167115
2019-03-25 10:21:04 -07:00
Nicolas Papernot
0ebd134d99 Closes #33
PiperOrigin-RevId: 239129202
2019-03-18 22:42:01 -07:00
Nicolas Papernot
a9840529c4 Closes #29
PiperOrigin-RevId: 239030654
2019-03-18 11:54:20 -07:00
Galen Andrew
9a53e1eb86 Adds AdaptiveClipAverageQuery which performs adaptive adjustment of the clipping norm to approximate a specified quantile of clipped updates per round.
PiperOrigin-RevId: 238698171
2019-03-15 13:19:22 -07:00
Galen Andrew
e566967ff6 Simplify GaussianQuery by removing _GlobalState.
The global state for DP query is intended for aspects of the query that change across samples under the query's own control. It was therefore unnecessary to wrap "l2_norm_clip" and "sum_stddev" in the namedtuple _GlobalState for the basic GaussianQuery classes.

PiperOrigin-RevId: 237528962
2019-03-08 15:17:48 -08:00
cclauss
d9780c043e
from six.moves import xrange
__xrange()__ was removed in Python 3 in favor of a reworked version of __range()__.

[flake8](http://flake8.pycqa.org) testing of https://github.com/tensorflow/privacy on Python 3.7.1

$ __flake8 . --count --select=E9,F63,F72,F82 --show-source --statistics__
```
./privacy/optimizers/gaussian_query_test.py:65:16: F821 undefined name 'xrange'
      for _ in xrange(1000):
               ^
./research/pate_2018/ICLR2018/rdp_bucketized.py:79:12: F821 undefined name 'xrange'
  for i in xrange(n):
           ^
./research/pate_2018/ICLR2018/rdp_bucketized.py:106:12: F821 undefined name 'xrange'
  for i in xrange(n):
           ^
./research/pate_2018/ICLR2018/rdp_bucketized.py:139:12: F821 undefined name 'xrange'
  for i in xrange(n):
           ^
4     F821 undefined name 'xrange'
4
```
__E901,E999,F821,F822,F823__ are the "_showstopper_" [flake8](http://flake8.pycqa.org) issues that can halt the runtime with a SyntaxError, NameError, etc. These 5 are different from most other flake8 issues which are merely "style violations" -- useful for readability but they do not effect runtime safety.
* F821: undefined name `name`
* F822: undefined name `name` in `__all__`
* F823: local variable name referenced before assignment
* E901: SyntaxError or IndentationError
* E999: SyntaxError -- failed to compile a file into an Abstract Syntax Tree
2019-03-08 10:35:01 +01:00
Steve Chien
b892d650cf Tests for Eager mode.
PiperOrigin-RevId: 236382269
2019-03-01 14:48:29 -08:00
Nicolas Papernot
0c691085e1 missing reduce_mean
PiperOrigin-RevId: 235858614
2019-02-26 22:56:29 -08:00
Nicolas Papernot
c2d4b17881 Add support for the Eager mode
PiperOrigin-RevId: 235733975
2019-02-26 09:20:28 -08:00
Steve Chien
f37c9d1ea1 Use mean loss within each microbatch.
PiperOrigin-RevId: 233832864
2019-02-13 14:42:12 -08:00
Steve Chien
d75f1b80ba Fix copybara to limit some transformations to the beginning of the line.
PiperOrigin-RevId: 233151293
2019-02-08 16:55:57 -08:00
A. Unique TensorFlower
4d0ab48c35 Add privacy ledger.
The privacy ledger keeps a record of all sampling and query events for analysis post hoc by the privacy accountant.

PiperOrigin-RevId: 233094012
2019-02-08 11:21:43 -08:00
A. Unique TensorFlower
36d9959c19 internal change
PiperOrigin-RevId: 233093203
2019-02-08 11:17:09 -08:00
A. Unique TensorFlower
098c5220b5 Remove test broken by upstream tf changes.
tf.nest.map_structure_up_to has changed so that map_structure_up_to(x, func, x, y) no longer raises an error when y is longer than x, for example x=[1,2], y=[1,2,3]. This broke one of our tests for nested query. Remove the test until (if and when) the old, more reasonable, behavior is restored.

PiperOrigin-RevId: 232057385
2019-02-01 16:22:05 -08:00
Galen Andrew
c8cb3c6b70 General cleanup.
1. Rename PrivateQuery to DPQuery.
2. Move construction of DPQuery to outside of optimizer.
3. Remove PrivateAverageQuery and PrivateSumQuery, and rename DPQuery's 'get_query_result' method to 'get_noised_result'. Rename private_queries.py to dp_query.py.
4. Remove thrice-replicated run_query function from the test classes and replace with a single function in new test_utils.py.
5. Add functions gaussian_sum_query_from_noise_multplier and gaussian_average_query_from_noise_multplier.

PiperOrigin-RevId: 230595991
2019-01-23 14:41:44 -08:00
Steve Chien
7e2d796bde Minor fixes for Python 2/3 compatibility.
PiperOrigin-RevId: 230022543
2019-01-18 17:33:22 -08:00
Peter Kairouz
0b56f7c016 Add optional argument for weighted sum and weighted average queries.
PiperOrigin-RevId: 230021515
2019-01-18 17:25:58 -08:00
Alex Pine
6c5c39c4f2 Created the optional unroll_microbatches parameter for the DpOptimizerClass as a workaround for b/122613513.
PiperOrigin-RevId: 229955297
2019-01-18 11:51:44 -08:00
Peter Kairouz
5ee12803f3 Create NoPrivacySumQuery and NoPrivacyAverageQuery.
PiperOrigin-RevId: 229273971
2019-01-14 17:39:36 -08:00
Nicolas Papernot
398d1d052f Closes #4
PiperOrigin-RevId: 229212766
2019-01-14 10:55:15 -08:00
Steve Chien
c30f6d776e Add test to ensure DP optimizers work with tf.estimator Estimators.
PiperOrigin-RevId: 228920704
2019-01-11 15:50:56 -08:00
schien
251d6298c6 Fix Python 3 compatibility issues
PiperOrigin-RevId: 228232503
2019-01-07 14:09:31 -08:00
Steve Chien
1689cf3a77
Revert "Fix Python 3 compatibility issues" 2019-01-07 13:44:35 -08:00
cclauss
d72378f913 Fix Python 3 compatibility issues 2018-12-24 03:55:12 +01:00
A. Unique TensorFlower
b4188446e0 Project import generated by Copybara.
PiperOrigin-RevId: 226345615
2018-12-20 09:17:59 -08:00
Steve Chien
1595ed3cd1 Project import generated by Copybara.
PiperOrigin-RevId: 226056146
2018-12-18 15:44:04 -08:00
A. Unique TensorFlower
ceee90b1ac Add GaussianSumQuery and express GaussianAverageQuery in terms of it.
Also:
1. Add unit tests for both types of query.
2. Add function "get_query_result" to PrivateQuery. (The utility of having this function is made clear in the test class, where the function _run_query operates on either GaussianSum- or GaussianAverageQueries.)
PiperOrigin-RevId: 225609398
2018-12-18 15:41:38 -08:00
Steve Chien
0af76c7b3d Update to allow bazel on tensorflow_privacy to work out of the box.
PiperOrigin-RevId: 225605386
2018-12-18 15:41:26 -08:00
Steve Chien
b8418b0523 PiperOrigin-RevId: 224078477 2018-12-05 14:03:22 -08:00
Steve Chien
afb8189dba PiperOrigin-RevId: 224061027 2018-12-04 17:01:39 -08:00