The bitcoin blockchain is assembled by miners, block by block. The miners assemble a block by selecting transactions from the "Mempool" - the set of transactions which have been broadcast and received by the miner, but not yet included in a previous block. There are almost always more transactions waiting than can be included in one block, because of the block size limit. For various reasons, these transactions come in different sizes (# of bytes) and include different fees (BTC to be paid to the miner for including the transaction in a block). When a miner successfully adds a block to the blockchain, they collect the "block reward" (currently 12.5 BTC) and all of the fees from the included transactions.
A miner will usually try to include as much value (in transaction fees) as they can in a block. Transaction size can vary significantly, but the space available in a block is fixed. Therefore, miners must consider both the included fee and the transaction size. A good metric to pay attention to is thus "satoshis per byte" - this is simply the fee (in Satoshis) divided by the transaction size (in bytes).
A miner can simply sort the Mempool by Satoshis per byte and choose the top 1000 kB of transactions. Then they go to work and try to find a valid block including this set of transactions. If they win the race, they collect the block reward and the transaction fees. If someone else finds a block first, they have to start over. (Some or most of the transactions were probably included in the block found by the competing miner, and are now invalid. Plus, there may be new, more valuable transactions available in the Mempool.)
So, what do you do in order to pay low fees, but still get your transactions confirmed? Right now, most wallets kinda suck at doing this automatically, but some do let you set your own fees. (You might have to look in "advanced options".) Use a wallet that puts you in control.
How do you know how much of a fee to pay? Here are two good resources:
https://tradeblock.com/bitcoin - Tradeblock is really cool. You can watch blocks being added to the blockchain live. You can see the current size of the Mempool, watch new transactions stream in, and see charts of transaction fees and Mempool size over recent timeframes. It's a little like a weather report for Bitcoin. Is today a good day to transact, or should I wait? (At the time of this writing, the Mempool went from spending a few weeks at 0-3.5 MB to a few days above 30 MB, and has recently fallen to 25 MB. Exercise: What do you think transaction fees and confirmation times look like as a result?)
https://bitcoinfees.earn.com/ - Predicts how many blocks, or alternatively how many minutes, a submitted transaction would wait in the Mempool before being included in a block. Until wallets get better at fee estimation, you can just use this site to choose a fee based on how urgently you want your transaction to be included in a block.
How important is a quick confirmation? If you are sending to yourself (like from one wallet to another), you might not care at all. Waiting a few days might not be a problem. If you are shopping online, and are worried that your session might time out if the confirmation takes too long, you can choose the cheapest fee from the bitcoinfees site above that shows a 0 block wait time.
Just don't use a wallet that adds a $7 fee to an unimportant $2 transaction, without at least looking at the Mempool to see if this fee even makes sense at the current moment.